Ogni scheda Arduino è dotata di un pulsante “reset” che, se premuto, esegue una completa reinizializzazione della scheda, disattivando tutte le uscite e riavviando l’esecuzione dello sketch caricato. Il fenomeno è lo stesso che si ottiene togliendo e ricollegando l’alimentazione della scheda. Una domanda che può sorgere è:
“Posso eseguire il reset della scheda direttamente via programma?”
Un esempio di applicazione può essere l’esecuzione di un determinato algoritmo che esegue delle istruzioni e poi si vuole che lo sketch parta dall’inizio in modo automatico, senza dover premere manualmente il pulsante reset.
Soluzione 1 – simulare la pressione di reset elettronicamente
Arduino è dotato di un pin RST che, se portato a livello basso (0V) esegue il reset della scheda. Il pulsante reset su questa non fa altro che portare a massa tale pin. Una possibile soluzione per eseguire il reset via software è quella di collegare tale pin ad un uscita digitale, e portare questa a livello basso quando si vuole eseguire il reset.
E’ bene notare però che ad ogni avvio di Arduino, tutti i pin sono impostati a livello basso (0V) e ciò implica che ad ogni avvio la scheda andrebbe in reset continuamente senza mai avviarsi. Per ovviare a questo problema è sufficiente impostare il pin già a livello alto (HIGH) inserendo l’istruzione come prima voce nel void_setup()
. Il collegamento tra i pin va effettuato con una resistenza (es. 10kΩ) in modo da non mettere in corto l’uscita in caso di una pressione manuale del pulsante reset sulla scheda.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//Esempio di reset elettronico di Arduino: il led collegato all'uscita lampeggia per 10 volte e successivamente //la scheda viene riavviata portando a livello logico basso (0V) il pin RST, collegato ad un uscita digitale. #define out_rst 10 #define led_pin 2 void setup() { digitalWrite(out_rst, HIGH); //inizializza l'uscita a livello alto pinMode(out_rst, OUTPUT); pinMode(led_pin, OUTPUT); } void loop() { for(int i=0; i<10; i++){ digitalWrite(led_pin, HIGH); delay(200); digitalWrite(led_pin, LOW); delay(200); } digitalWrite(out_rst, LOW); //porta l'uscita a livello basso per resettare la scheda } |
Soluzione 2 – riavvio via firmware
Una soluzione completamente software è quella di dichiarare la seguente funzione all’inizio del vostro sketch. A differenza però di una pressione del pulsante reset, questa funzione si limita a rieseguire il listato dall’inizio ma eventuali uscite attivate nel corso della precedente esecuzione non vengono reimpostate a livello basso, a meno che non inseriamo nel blocco void setup()
le istruzioni apposite.
Per esegire il reset è sufficiente richiamare l’istruzione resetFunc()
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//Esempio di reset elettronico di Arduino: il led collegato all'uscita lampeggia per 10 volte e successivamente //la scheda viene riavviata attraverso il richiamo di una funzione apposita. #define led_pin 2 void(* resetFunc) (void) = 0; //dichiarazione funzione reset void setup() { pinMode(led_pin, OUTPUT); digitalWrite(led_pin, LOW); //inizializza l'uscita spenta } void loop() { delay(1000); for(int i=0; i<10; i++){ digitalWrite(led_pin, HIGH); delay(200); digitalWrite(led_pin, LOW); delay(200); } resetFunc(); //riesegui il listato } |
16,946 total views, 1 views today