Сторожевой таймер — это таймер, который перезагружает микроконтроллер, если его не сбросить вовремя. Стандартная библиотека Arduino его не использует, но мы можем включить его в любой момент.
Хак: Защищаем критически важные проекты (сигнализация, управление двигателями, медицинские приборы) от зависаний.
#include <avr/wdt.h>
void setup() {
// Настраиваем сторожевой таймер на 1 секунду
wdt_enable(WDTO_1S);
Serial.begin(115200);
}
void loop() {
// Основной код
Serial.println("Работаю...");
// Сбрасываем сторожевой таймер в каждом цикле
wdt_reset();
// Если код зависнет здесь на >1 секунды, плата перезагрузится!
delay(500);
wdt_reset();
delay(500);
// Если программа не сбросит таймер — перезагрузка!
}
// Обработчик сброса (вызывается при перезагрузке по Watchdog)
void watchdogResetHandler() {
Serial.println("Внимание! Перезагрузка по сторожевому таймеру!");
}
Где использовать: Автоматические кормушки, теплицы, системы полива. Если контроллер зависнет, таймер перезагрузит его, и система продолжит работу.