domingo, 31 de enero de 2016

ESP8266 Interrupciones con Arduino IDE

El tema de las interrupciones en el módulo ESP8266 es un poco distinto al utilizado con el Arduino UNO

En este ejemplo vamos a utilizar un pulsador conectado entre GPIO12 y masa para que, cuando lo pulsemos, se produzca un interrupción y cambie el estado de un led.

El esquema completo es el siguiente:


Untitled Sketch_bb.png



En primer lugar, hay que definir el pin en el que se producirá la interrupción:

#define BUTTON 12 //pulsador en GPIO12 (D6)



En setup() debemos indicar que el pin definido anteriormente  va a realizar funciones de interrupción:

pinMode(BUTTON, INPUT_PULLUP);


El modo INPUT_PULLUP hace que se utilicen las resistencias pull-up internas del módulo conectadas a Vcc. De este modo, el pin se encuentra a nivel alto en condiciones normales y cuando pulsamos el nivel pasa a 0v.



Por último, hay que indicar la función que se ejecutará cuando se produzca la interrupción:

attachInterrupt(BUTTON,parpadeo,FALLING);


En este caso, la interrupción se produce durante el flanco de bajada de la señal. Existen otros modos:

  • LOW: cuando pasa a nivel bajo
  • CHANGE: cuando cambia de valor
  • RISING: en el flanco de subida


La función parpadeo lo que hace es alternar el valor de la variable estado y en loop() enciende o apaga el led dependiendo del estado de dicha variable.



El código completo es el siguiente:


#define BUTTON 12 //botón en GPIO12 (D6)
#define LED 16 // GPIO16 (D0)
volatile int estado = HIGH; //estado inicial
void setup() { pinMode(LED,OUTPUT); digitalWrite(LED,LOW);
delay(2000);
pinMode(BUTTON, INPUT_PULLUP); attachInterrupt(BUTTON,parpadeo,FALLING); }
}
void parpadeo() { estado = !estado; } void loop() {
digitalWrite(LED,estado);
Fuentes:

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.