Come resettare Arduino via software

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:


  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.

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!

3 commenti:

  1. Daniele, nel codice sono spariti gli argomenti dei due #include prima del #define.
    Bisogna aggiungere: #include
    Altrimenti il compilatore dice parolacce! :D

    RispondiElimina
  2. E' sparito anche nel mio commento:

    Lo scrivo only_for_humans: segno_di_minore avr/wdt.h segno_di_maggiore

    RispondiElimina
    Risposte
    1. Grazie mille, maggiore e minore non vanno d'accordo con HTML
      ;)

      Elimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post