Come resettare Arduino

Molte volte si ha la necessità di fare un reset della vostra scheda arduino, non con il solito tasto presente sulla scheda, ma direttamente dal nostro codice. Questo metodo è molto comodo se avete la necessità di montare il vostro Arduino in un posto difficile da raggiungere o se lo controllate da remoto.

Un primo metodo è dichiarare la seguente funzione:
void (*resetBoard)() = 0;
Richiamandola poi con resetBoard() verrà resettata la scheda.


Siccome questo metodo fa semplicemente ripartire l’esecuzione del programma dall’inizio, potrebbero verificarsi problemi a causa di ram, timer ed interrupt “sporchi”.

Molto meglio è utilizzare il watchdog come mostrato in questo codice di esempio:

  1. #include <avr/io.h>
    #include <avr/wdt.h>
  2. #define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {} //definizione della funzione reset
  3. int i = 0;
  4. void setup() {
  5.   Serial.begin(9600);
  6.   Serial.println(“Inizio programma!”);
  7. }
  8. void loop() {
  9.   i++;
  10.   if (<= 5)
  11.   {
  12.     delay (1000);
  13.     Serial.print(“Secondi trascorsi: “);
  14.     Serial.println(i);
  15.   }
  16.   else
  17.   {
  18.     Serial.println(“Resetto tutto!”);
  19.     delay(1000);
  20.     Reset_AVR(); //arrivati in questo punto verrà resettata la scheda
  21.   }
  22. }


Caricatelo sul vostro Arduino, aprendo serial monitor vedrete che dopo alcuni secondi la scheda si resetterà.
L’esecuzione del codice ripartirà dall’inizio.