#include <avr/wdt.h>
#define LED_WDT 12
const unsigned long BLINK_HALF_PERIOD = 500;
const unsigned long WDT_RESET_PERIOD = 1000;
const unsigned long SKIP_WDT_RESET_AFTER_MS = 10000;
unsigned long blink_time;
unsigned long wdt_reset_time;
unsigned long wdt_enable_reset_time;
void setup() {
wdt_reset();
wdt_enable(WDTO_8S);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(LED_WDT, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(LED_WDT, LOW);
if ((MCUSR) & (1<<(WDRF))) {
// utolso reset WDT miatt volt
digitalWrite(LED_WDT, HIGH);
}
MCUSR = 0;
}
void loop() {
const unsigned long time = millis();
if ((time - blink_time) >= BLINK_HALF_PERIOD) {
blink_time = time;
digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));
}
if (((time - wdt_enable_reset_time) <= SKIP_WDT_RESET_AFTER_MS)
&& ((time - wdt_reset_time) >= WDT_RESET_PERIOD))
{
wdt_reset_time = time;
wdt_reset();
}
}