// Declarar el puntero al temporizador
hw_timer_t *timer = NULL;
// Variable para alternar el estado del LED
volatile bool ledState = false;
// Variables para el control de tiempos
volatile uint32_t ton = 250; // Tiempo inicial TON en microsegundos
volatile uint32_t intervalCount = 0; // Contador para cambios de TON
volatile uint32_t cycleTime = 5000000; // 5 segundos en microsegundos
void IRAM_ATTR onTimer() {
// Alternar el estado del LED
ledState = !ledState;
digitalWrite(2, ledState); // Cambia el pin 2 según lo necesites
// Incrementar el contador de intervalo
intervalCount++;
// Cambiar TON después de 5 segundos
if (intervalCount * ton >= cycleTime) {
intervalCount = 0; // Reiniciar el contador
if (ton == 250) {
ton = 50; // Cambiar a 50 µs
} else if (ton == 50) {
ton = 750; // Cambiar a 750 µs
} else {
ton = 250; // Reiniciar a 250 µs
}
timerAlarmWrite(timer, ton, true); // Actualizar el TON del temporizador
}
}
void setup() {
// Configurar el pin 2 como salida
pinMode(2, OUTPUT);
// Inicializar el temporizador (Timer 0, prescaler 80, cuenta ascendente)
timer = timerBegin(0, 80, true); // 80 prescaler => 1 tick = 1 µs
// Vincular la interrupción al temporizador
timerAttachInterrupt(timer, &onTimer, true);
// Configurar el temporizador con el TON inicial
timerAlarmWrite(timer, ton, true);
// Habilitar la alarma
timerAlarmEnable(timer);
}
void loop() {
}