Code: Select all
const int button = 0; // 按键用于触发延时
const int wdtTimeout = 3000; // 看门狗时间(ms)
hw_timer_t *timer = NULL;
void IRAM_ATTR resetModule() { // 中断函数
Serial.println("reboot\n");
esp_restart();
}
void setup() {
Serial.begin(9600);
Serial.println();
Serial.println("running setup");
pinMode(button, INPUT_PULLUP);
timer = timerBegin(0, 80, true); // 选择timer0,分频系数为80,向上计数
timerAttachInterrupt(timer, &resetModule, true); // 绑定中断函数
timerAlarmWrite(timer, wdtTimeout * 1000, false); // 设置报警保护函数
timerAlarmEnable(timer); // 使能报警器
}
void loop() {
Serial.println("running main loop");
timerWrite(timer, 0); // 重置定时器,喂狗 (feed watchdog)
long loopTime = millis();
// 当按键被按着超过了3秒,看门狗重启程序
while (!digitalRead(button)) {
Serial.println("button pressed");
delay(500);
}
delay(1000);
loopTime = millis() - loopTime;
Serial.print("loop time is = ");
Serial.println(loopTime);
}