Interupsi Timer pada ESP32
Contoh program Interupsi timer dengan frekuensi 1 kHz, output ke GPIO nomor 2 Menggunakan Arduino Core versi 3.x (bukan 2.x)
Kode #
// ESP32 - 1 kHz LED Blink via Hardware Timer Interrupt
// Compatible with ESP32 Arduino Core v3.x (new timer API)
#define LED_PIN 0 // Built-in LED on most ESP32 dev boards
volatile bool ledState = false;
hw_timer_t* timer = NULL;
// ISR - fires at 2 kHz, toggles LED → full ON/OFF cycle = 1 kHz
void IRAM_ATTR onTimer() {
ledState = !ledState;
digitalWrite(LED_PIN, ledState);
}
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
// New API (Core v3.x): timerBegin(frequency_hz)
// 2000 Hz ISR → LED toggles 2000x/sec → blink cycle = 1 kHz
timer = timerBegin(2000);
// Attach ISR
timerAttachInterrupt(timer, &onTimer);
// Alarm every 1 tick at 2000 Hz = every 500 µs
timerAlarm(timer, 1, true, 0);
Serial.println("1 kHz LED blink started (Core v3.x API).");
}
void loop() {
// Main loop is free — all work done in ISR
delay(1000);
Serial.println("Running... LED blinking at 1 kHz.");
}