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:
- #include <avr/io.h>
#include <avr/wdt.h> - #define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {} //definizione della funzione reset
- int i = 0;
- void setup() {
- Serial.begin(9600);
- Serial.println(“Inizio programma!”);
- }
- void loop() {
- i++;
- if (i <= 5)
- {
- delay (1000);
- Serial.print(“Secondi trascorsi: “);
- Serial.println(i);
- }
- else
- {
- Serial.println(“Resetto tutto!”);
- delay(1000);
- Reset_AVR(); //arrivati in questo punto verrà resettata la scheda
- }
- }
Caricatelo sul vostro Arduino, aprendo serial monitor vedrete che dopo alcuni secondi la scheda si resetterà.
L’esecuzione del codice ripartirà dall’inizio.