FALLING, RISING y CHANGE
Parte de la sección Temporización sin delay del Journey de Arduino de Coddy. Lección 13 de 18.
El Uno tiene dos pines que pueden activar una interrupción: el pin 2 y el pin 3. Un botón que necesita una interrupción debe conectarse a uno de ellos. Dentro del chip son la interrupción 0 y la interrupción 1, así que deja que digitalPinToInterrupt() convierta el pin en su número. attachInterrupt(3, ...) solicita la interrupción 3, que el Uno no tiene, y no ocurre nada.
La última parte de attachInterrupt() indica a qué cambio reaccionar:
FALLING: el pin pasa deHIGHaLOW(con una resistencia pull-up, al pulsar)RISING: el pin pasa deLOWaHIGH(al soltar)CHANGE: cualquiera de los dos
Con CHANGE, la ISR se ejecuta al pulsar y al soltar. Lee el pin para averiguar cuál de las dos cosas ocurrió:
void onChange() {
if (digitalRead(buttonPin) == LOW) {
// se pulsó
} else {
// se soltó
}
}
attachInterrupt(digitalPinToInterrupt(buttonPin), onChange, CHANGE);Desafío
FácilEl botón está en el pin 3 y loop() está ocupado con una tarea lenta. Haz que el LED del pin 13 siga al botón al instante:
- en
onChange(), lee el botón:LOWenciende el LED,HIGHlo apaga - conecta
onChange()al pin del botón conCHANGE
Presiona Run, mantén presionado y suelta el botón, después presiona Check.
Pruébalo tú mismo
const int ledPin = 13;
const int buttonPin = 3;
// Se ejecuta cada vez que cambia el estado del pin del botón.
void onChange() {
// enciende el LED cuando el botón está pulsado y apágalo cuando se suelta
}
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
// asocia onChange() al pin del botón aquí
}
void loop() {
// la tarea lenta: déjala como está
Serial.println("working");
delay(2000);
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Temporización sin delay
3Interrupciones
Una pulsación que el bucle pasa por altoFALLING, RISING y CHANGECompartir con volatileContar pulsaciones mediante interrupcionesPractica por tu cuenta: Playground de Arduino