#include <avr/wdt.h>
#define LED_PIN 8
#define UL unsigned long
UL prev = millis();
void setup() {
wdt_disable();
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
//watchdogSetup(0b1100000); // WDT 4s = Ciclo 8s
watchdogSetup(0b1000111); // WDT 2s = Ciclo 4s
}
volatile bool watchdogFired = false;
ISR(WDT_vect) {
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
watchdogFired = true;
}
void watchdogSetup(byte config) {
cli();
WDTCSR = bit (WDCE) | bit (WDE); // SETUP MODE, NECESSÁRIO
WDTCSR = config;
wdt_reset();
sei();
}
void loop() {
if (watchdogFired) {
UL now = millis();
watchdogFired = false;
String status = digitalRead(LED_PIN) ? "ON" : "OFF";
Serial.println("LED " + status);
Serial.println("TIME SINCE LAST WDTI: " + String(now - prev) + "ms" + "\n");
prev = now;
wdt_reset();
}
}