/* Programa de ejemplo inicial Timers */
// https://wokwi.com/projects/411665595302276097
volatile int cuenta; // variable se incrementa en la ISR y se decrementa en main
int total_interrupciones; // número total de interrupciones -> segundos
#define LED_PIN 23
hw_timer_t * timer = NULL; // estructura de datos del timer
// ISR finTimer
void IRAM_ATTR finTimer() {
cuenta=1;
}
void setup() {
Serial.begin(115200);
Serial.printf("\n\n Ejemplo Timer - cuenta segundos y parpadea led\n");
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH); //encendido
timer = timerBegin(10e3); // valor freqTimer > 1250 pues configura prescaler => 80e6/ (2 o 65536)
timerAttachInterrupt(timer, &finTimer);
// timerAlarm(hw_timer_t *timer, uint64_t alarm_value, bool autoreload, uint64_t reload_count);
timerAlarm(timer, 5000, true, 0); // alarma - ISR cada medio segundo
}
void loop() {
if (cuenta==1) {
cuenta=0; // se pone a 0
total_interrupciones++;
Serial.printf("Numero veces ISR (segundos):%d \n", total_interrupciones);
if ( total_interrupciones%2 == 0) {
digitalWrite(LED_PIN, HIGH); // apaga
} else {
digitalWrite(LED_PIN, LOW); // enciende (cada 2 segundos)
}
}
}