Arduino – Reset scheda via programma

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.

 

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().

16,132 total views, 1 views today