#include <Ticker.h>
#define pin_led 26
#define pin_btn 27
volatile bool state = false; //el boton empieza no pulsado
volatile bool estado0 = true; // el estado 0 es el inicial
volatile bool estado1 = false; //el estado 1 no es el inicial
int numParpadeos = 0;
int frecuencia =
Ticker timerCambio; //defino timer del cambio de estado
Ticker timerParpadeo; //defino timer del parpadeo
//Programo las interrupciones del timerParpadeo
void IRAM_ATTR parpadeoLED(){
if (numParpadeos < 2) { // 2 cambios es 1 parpadeo
digitalWrite(pin_led, !digitalRead(pin_led)); // Cambia el estado del LED
numParpadeos++; // Aumenta el contador de parpadeos
} else {
digitalWrite(pin_led, LOW); // Apaga el LED
}
}
void IRAM_ATTR interrupcion() {
numParpadeos = 0; //Reinicia el contador de parpadeos
timerParpadeo.attach(0.5, parpadeoLED); //Inicia el temporizador para alternar el LED cada 0.5 segundos
}
//Programo la interrupcion del cambio de estado
void IRAM_ATTR cambioEstado(){
state = !state;
digitalWrite(pin_led, !digitalRead(pin_led)); // Cambia el estado del LED
}
void setup() {
Serial.begin(9600);
pinMode(pin_btn, INPUT_PULLUP);
pinMode(pin_led, OUTPUT);
timerParpadeo = timerBegin(0, 80, true) // 80 es para hacer 1MHz
timer attachInterrupt(digitalPinToInterrupt(pin_btn), interrupcion, RISING);
}
void loop() {
// delay de 50ms ---> 20Hz
delay(500);
}