Ciao!
In questo post vedremo come resettare il nostro 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:
Caricatelo sul vostro Arduino, aprendo serial monitor vedrete che dopo alcuni secondi la scheda si resetterà.
L'esecuzione del codice ripartirà dall'inizio.
In questo post vedremo come resettare il nostro 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.
Nell'esempio il watchdog è impostato a 30ms, se avete esigenze diverse potete impostare altri valori per il watchdog
Fonti: MB su Forum Arduino
Questo è tutto,
per qualsiasi domanda lascia pure un commento.
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!
Questo è tutto,
per qualsiasi domanda lascia pure un commento.
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!
Daniele, nel codice sono spariti gli argomenti dei due #include prima del #define.
RispondiEliminaBisogna aggiungere: #include
Altrimenti il compilatore dice parolacce! :D
E' sparito anche nel mio commento:
RispondiEliminaLo scrivo only_for_humans: segno_di_minore avr/wdt.h segno_di_maggiore
Grazie mille, maggiore e minore non vanno d'accordo con HTML
Elimina;)