domingo, 31 de enero de 2016

ESP8266 Interrupciones con Arduino IDE


El tema de las interrupciones 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);
 pinMode(BUTTON, INPUT_PULLUP);
 attachInterrupt(BUTTON,parpadeo,FALLING);
 delay(2000);
}

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.