//Cuando detecte interrupción, se enciende un led durante 3.2s
#define button 14
#define led 17
volatile bool button_released = false;
hw_timer_t *timer1 = NULL;
volatile bool led_on = false;
void IRAM_ATTR button_ISR() {
button_released = true;
}
void IRAM_ATTR timer_blink() {
if (led_on) {
digitalWrite(led, LOW); // Apaga el LED después de 3 segundos
timerAlarmDisable(timer1); // Desactiva el temporizador
led_on = false;
}
}
void setup() {
pinMode(button, INPUT_PULLUP);
pinMode(led, OUTPUT);
attachInterrupt(digitalPinToInterrupt(button), button_ISR, FALLING);
timer1 = timerBegin(0, 80, true); // 80 prescaler (1 tick = 1 microsegundo)
timerAttachInterrupt(timer1, &timer_blink, true);
timerAlarmWrite(timer1, 3200000, false); // 3 segundos (3,000,000 microsegundos)
Serial.begin(115200);
}
void loop() {
if (button_released) {
button_released = false;
digitalWrite(led, HIGH); // Enciende el LED
led_on = true;
timerRestart(timer1);
timerAlarmEnable(timer1); // Activa el temporizador para 3 segundos
}
delay(10);
}