// programa
volatile int cuenta; // variable se incrementa en la ISR y se decrementa en main
int total_interrupciones; // número total de interrupciones -> segundos
#define PULS_PIN 34
#define LED_PIN 23
hw_timer_t * timer = NULL; // estructura de datos del timer
volatile uint32_t freqT;
volatile int pulsado;
void IRAM_ATTR ISR_pulsador() {
//detachInterrupt(digitalPinToInterrupt(PULS_PIN)); // sin rebotes se puede comentar
timerRestart(timer);
//timerWrite(timer,0);
pulsado=1;
digitalWrite(LED_PIN, HIGH); //encendido
}
volatile int tiempo;
void IRAM_ATTR ISR_timer() {
tiempo=1;
digitalWrite(LED_PIN, LOW); //apagado
//attachInterrupt(digitalPinToInterrupt(PULS_PIN), ISR_pulsador, FALLING);
}
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW); //apagado
// Interrupción en flanco descendente
attachInterrupt(digitalPinToInterrupt(PULS_PIN), ISR_pulsador, FALLING);
freqT=1e6;
timer = timerBegin(freqT); // cuenta useg
timerAttachInterrupt(timer, &ISR_timer);
timerAlarm(timer, 30e5, true, 0); // alarma cada 3 segundos - se repite indefinidamente
}
void loop() {
if(pulsado){
Serial.printf("Se enciende led 3 seg - valor contador timer actual: %d\n", timerRead(timer));
pulsado=0;
}
delay(10);
}