Dubbi e problemi con watchdog

Ciao, possiedo un arduino nano (non originale ma equivalente all’originale se non nel controller usb) il quale sto sperimentando la funzione watchdog.
Da quello che ho capito il watchdog è un “contatore” indipendente da tutto che se non resettato entro un determinato periodo resetta (o altro ma non ho ancora approfondito) il micro controllore.
Ho quindi provato a compilare uno sketch del genere:

     #include <avr/wdt.h>

// the setup function runs once when you press reset or power the board
void setup() {
  wdt_disable();
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second

  if (millis() > 20000){wdt_enable(WDTO_8S);}  
}

Da quello che ho capito tramite questa libreria e il mio codice, passati 20 secondi dall’avvio di arduino e passati altri 8s per il conteggio del watchdog arduino dovrebbe riavviarsi come se si premesse il pulsante reset fisico. Il comportamento che ottengo è che passati 28 secondi arduino di riavvia ma l’esecuzione del codice rimane bloccata rendendo di fatto inutile un riavvio del genere.
Sbaglio qualcosa?

Rimane bloccato nel senso che il led non ti lampeggia più???
Comunque prova così:

     #include <avr/wdt.h>

unsigned long startupTime;
long intervallo = 20000;
// the setup function runs once when you press reset or power the board
void setup() {
  wdt_disable();
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
  startupTime = millis();
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second

  if (millis() - startupTime > intervallo){wdt_enable(WDTO_8S);} 
}

È un problema noto del vecchio bootloader della Nano di cui si è parlato più volte ... SE hai una vecchia Nano (... o un clone cinese, dato che il 99% di essi monta il vecchio bootloader) o aggiorni il bootloader ad "Optiboot" o NON puoi usare il WD.

Per aggiornare il bootloader ti occorre un programmatore ISP (non si può fare da seriale).

Guglielmo

P.S.: Se guardi nell'IDE vedi che ora ci sono TRE tipi diversi di Nano, uno basato su ATmega168 e non ci interessa e DUE per ATmega328P per vecchio bootloader ed uno per il nuovo (che è appunto Optiboot).

Ops, questa mi mancava :-[

confermo, una volta aggiornato va alla grande! l'ho caricato su tutti i nano.
Tra l'altro ho usato questo metodo per caricarlo, usando un altro nano.
Nel forum c'è una guida se non sbaglio anche se non so bene dove. In caso cerca nel web. C'è tutto..