NodeMCU en español
NodeMCU - Juan Antonio Villalpando
-- Tutorial de NodeMCU en español --
Volver al índice del tutorial NodeMCU
____________________________
220.- Wemos D1 R32 ESP32. Interrupción.
________________________________
- Interrupción con pulsadores.
- Tenemos dos pulsadores, uno en el terminal IO12 y otro en el IO14. También utilizaremos el LED2.
- No pondremos resistencias en los pulsadores, ya que utilizaremos PULLUP: pinMode(pulsador, INPUT_PULLUP);
- Observa cómo ponemos al terminal 12 y 14 en alto sin utilizar resistencia: INPUT_PULLUP

|
// Juan A. Villalpando.
// KIO4.COM
// Interrupciones con Pulsadores.
const int LED2 = 2;
const int pulsador12 = 12;
const int pulsador14 = 14;
// Funciones cuando se producen las interrupciones.
void IRAM_ATTR pulso_el_12() {
digitalWrite(LED2, HIGH);
}
void IRAM_ATTR pulso_el_14() {
digitalWrite(LED2, LOW);
}
void setup() {
pinMode(pulsador12, INPUT_PULLUP);
pinMode(pulsador14, INPUT_PULLUP);
pinMode(LED2, OUTPUT);
attachInterrupt(digitalPinToInterrupt(pulsador12), pulso_el_12, RISING);
attachInterrupt(digitalPinToInterrupt(pulsador14), pulso_el_14, RISING);
}
void loop() {}
|
- Observa cómo declaramos la interrupción:
attachInterrupt(digitalPinToInterrupt(pulsador12), pulso_el_12, RISING);
- Indica que la interrupción se ejecutará cuando se active el terminal pulsador, que en este caso es el 12, y ejecutará la función pulsado.
- RISING en la subida de 0 a 1. Si ponemos FALLING será en la bajada de 1 a 0.
- Fíjate que no hay código en el loop.
- El chequeo del toque se hace por interrupción.
- Para chequear los toques se utiliza: touchAttachInterrupt
- Para chequear pulsadores se utiliza: attachInterrupt
___________________________________________________________
- Otro ejemplo.
- Colocamos un pulsador en el terminal 12 y utilizamos el LED2.
Al pulsar el pulsador, se dispara una interrupción.
- Comienza a contar un temporizador.
- Mientras esté contando, el LED2 está encendido durante 5 segundos, en este ejemplo.
- Observa cómo ponemos al terminal 12 en alto sin utilizar resistencia. INPUT_PULLUP
- Observa cómo declaramos la interrupción:
attachInterrupt(digitalPinToInterrupt(pulsador), pulsado, RISING);
- Indica que la interrupción se ejecutará cuando se active el terminal pulsador, que en este caso es el 12, y ejecutará la función pulsado.
- RISING en la subida de 0 a 1. Si ponemos FALLING será en la bajada de 1 a 0.
- La función que se realiza en la interrupción es:
void IRAM_ATTR pulsado() {
________________________________
- Código.
|
#define Tiempo 5000 // En milisegundos.
const int LED2 = 2;
const int pulsador12 = 12;
unsigned long now = millis();
unsigned long tic = 0;
boolean comienzo = false;
// Función cuando se produce la interrupción.
void IRAM_ATTR pulsado() {
digitalWrite(LED2, HIGH);
comienzo = true;
tic = millis();
}
void setup() {
Serial.begin(115200);
pinMode(pulsador12, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(pulsador12), pulsado, RISING);
pinMode(LED2, OUTPUT);
digitalWrite(LED2, LOW);
}
void loop() {
now = millis();
if(comienzo && (now - tic > (Tiempo))) {
digitalWrite(LED2, LOW);
comienzo = false;
}
}
|
_______________________________
|