Часть 12: Использование сторожевого таймера (Watchdog) для анти-зависания

Сторожевой таймер — это таймер, который перезагружает микроконтроллер, если его не сбросить вовремя. Стандартная библиотека 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("Внимание! Перезагрузка по сторожевому таймеру!");
}

Где использовать: Автоматические кормушки, теплицы, системы полива. Если контроллер зависнет, таймер перезагрузит его, и система продолжит работу.

Вам также может понравиться

About the Author: ардуинчиков

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *