pages

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