#include <Arduino.h>
// 定義內建 LED 的引腳(ESP32 的內建 LED 通常位於引腳 2)
const int builtInLed = 2;
// 定義外部 LED 的引腳(這裡示例使用引腳 19)
const int externalLed = 19;
// 設置計時器1
hw_timer_t *timer1 = NULL;
volatile int timer1Counter = 0;
// 計時器0的中斷函式,每隔1秒執行一次
void IRAM_ATTR onTimer0() {
digitalWrite(builtInLed, !digitalRead(builtInLed)); // 切換內建LED的狀態
}
// 計時器1的中斷函式,每隔0.5秒執行一次,執行10次後停止
void IRAM_ATTR onTimer1() {
digitalWrite(externalLed, !digitalRead(externalLed)); // 切換外部LED的狀態
timer1Counter++;
if (timer1Counter >= 10) {
timerEnd(timer1); // 停止計時器1
timer1 = NULL; // 清除計時器物件
}
}
void setup() {
pinMode(builtInLed, OUTPUT); // 設置內建LED的引腳為輸出模式
pinMode(externalLed, OUTPUT); // 設置外部LED的引腳為輸出模式
timer1 = timerBegin(0, 80, true); // 計時器0,80MHz頻率
timerAttachInterrupt(timer1, &onTimer0, true); // 設定中斷函式
timerAlarmWrite(timer1, 1000000, true); // 每隔1秒觸發一次
timerAlarmEnable(timer1);
// 設置計時器1,每隔0.5秒觸發一次中斷,共觸發10次後停止
timer1 = timerBegin(1, 80, true); // 計時器1,80MHz頻率
timerAttachInterrupt(timer1, &onTimer1, true); // 設定中斷函式
timerAlarmWrite(timer1, 500000, true); // 每隔0.5秒觸發一次
timerAlarmEnable(timer1);
}
void loop() {
}