Interupsi Timer pada ESP32

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.");
}

Referensi #

comments powered by Disqus