sabato 3 settembre 2016

Tutorial: Come riavviare Arduino via software.

Come riavviare Arduino via software?
Molto spesso può nascere l’esigenza di dover riavviare una shield Arduino o una scheda ETA BETA idea via software, quest’operazione ci può risolvere tantissimi problemi soprattutto quando la scheda non è facilmente raggiungibile.
Supponiamo di aver realizzato un progettino tipo domotica o altro in un’ appartamento e quindi di aver posizionato in giro per casa, in cassette di derivazione o in controssoffittature, varie schede Arduino o Eta Beta idea, se dobbiamo riavviarle come facciamo? Logicamente il presupposto è che tutte le schede sia raggiungibili via seriale singolarmente o presenti su un bus, e che ad ogni scheda sia associato un id.
Per evitare di dover smontare tutta la casa, cercare in giro la scheda bloccata, la cosa più semplice da fare è inserire nel nostro sketch la possibilità di riavviare via seriale la scheda quando ne abbiamo la necessità, insomma … PREVENIRE è MEGLIO CHE CURARE!!!


  1. ELENCO MATERIALE
  • Scheda Arduino
oppure
  • Scheda ETA BETA IDEA


  1. SKETCH ARDUINO
Introduciamo nel nostro codice il void per riavviare la scheda:


void(* Riavvia)(void) = 0;


La dichiarazione di questa funzione permette di far ripartire il programma dall’indirizzo 0, come quando premiamo il tasto di reset.
Nel punto del codice in cui vogliamo far riavviare la scheda inseriamo il richiamo a questa funzione scrivendo:


Riavvia();


Vediamo un semplice esempio:

Carichiamo il programma Blink presente tra gli esempi di Arduino e facciamogli qualche piccola modifica per testare la nostra funzione di RESET via software.
Questo codice è stato testato sia per la scheda Arduino 2009, Arduino UNO, Arduino Mega ed ETA BETA idea con lo stesso risultato.... IL RESET.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
void(* Riavvia)(void) = 0;      //FUNZIONE PER RIAVVIARE LA SCHEDA

void setup() {
  Serial.begin(9600);          // INIZIALIZZA SERIALE
  pinMode(13, OUTPUT);         // DICHIARA DIGITAL13 COME OUTPUT
  digitalWrite(13, HIGH);      //ACCENDI LED
  delay(5000);                 //ASPETTA 5 SEC
  Serial.print("RIAVVIATO");   //STAMPA SU SERIALE RIAVVIATO 
  
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, LOW);     // SPEGNI LED
  delay(1000);               // ASPETTA 1 SECONDO
  digitalWrite(13, HIGH);    // ACCENDI LED
  delay(1000);               // ASPETTA 1 SECONDO
  digitalWrite(13, LOW);     // SPEGNI LED
  delay(1000);               // ASPETTA 1 SECONDO
  Riavvia();                 // ATTIVA FUNZIONE DI RIAVVIO
}

  1. SPIEGAZIONE CODICE


  • Nella prima riga del codice abbiamo inserito la funzione di riavvio
  • Nel SETUP, cioè in accensione abbiamo inizializzato la Seriale, ed eseguito le dichiarazioni sul led 13 facendolo accendere per 5 secondi appena si accende o si riavvia ARDUINO
  • Con il serial print  RIAVVIATO, andiamo a stampare sul monitor Seriale l’effettivo riavvio della scheda.
  • Nel Void loop facciamo eseguire le operazioni di accensione e spegnimento del led ogni secondo e poi richiamiamo la funzione di RIAVVIA, per riavviare Arduino