CONTENUTO ►
Esistono tre modi per riavviare Arduino senza premere il pulsante di reset: tutti saranno discussi in questa recensione. Arduino deve essere riavviato quando il microcontrollore si blocca o, ad esempio, quando si lavora con il modulo radio nRF24L01+, ad esempio quando il ricetrasmettitore perde la connessione e smette di funzionare. È difficile riavviare i ricetrasmettitori radio, ma non è un problema riavviare il microcontrollore Arduino.
Per questa attività sono necessari:
- Arduino Uno / Arduino Nano / Arduino Mega
- resistenza 1k
- breadboard
- cavi di collegamento
Riavviare Arduino in modo Software (soft reset)
Il software reset non è un vero e proprio reset del programma, ma solo una transizione all’inizio del programma (all’indirizzo zero). In altre parole, lo sketch inizia l’esecuzione dall’inizio senza modificare le impostazioni di Arduino al momento del soft reset. Ad esempio, se al momento del reset del microcontrollore è stato impostato il segnale “HIGH” su qualche uscita, il valore non tornerà a “LOW” per impostazione predefinita, ma rimarrà “HIGH”.
Programma per riavviare Arduino via software
unsigned long timer; void setup() { Serial.begin(9600); delay(100); Serial.println("start"); timer = millis(); } void loop() { if (millis() - timer > 10000) { Serial.println("reboot"); delay(100); asm volatile("jmp 0x00"); } }
Spiegazione del codice per riavviare Arduino Uno via software:
- function asm volatile(“jmp 0x00”); riavvia il programma dall’inizio, ma non resetta i pin del microcontrollore; il comando può essere utilizzato in qualsiasi punto del codice;
- nel nostro esempio, il riavvio del programma avviene ogni 10 secondi.
Per utilizzare il Watchdog Timer Arduino, è necessario includere il file avr/wdt.h e richiamare wdt_enable(). Il watchdog è un timer integrato (fino a 8 secondi) che può essere avviato o resettato. Non appena il timer raggiunge lo zero, il controllore emette un segnale di reset e il dispositivo si resetta. Se il programma Arduino impiega troppo tempo per essere eseguito, il Watchdog interviene e resetta microcontrollore Arduino (soft reset).
Programma per riavviare Arduino quando si blocca
#include "avr/wdt.h" unsigned long timer; void setup() { wdt_disable(); Serial.begin(9600); delay(100); Serial.println("start"); timer = millis(); wdt_enable(WDTO_4S); /* è possibile scegliere tra diversi valori predefiniti 15mS WDTO_15MS 30mS WDTO_30MS 60mS WDTO_60MS 120mS WDTO_120MS 250mS WDTO_250MS 500mS WDTO_500MS 1S WDTO_1S 2S WDTO_2S 4S WDTO_4S 8S WDTO_8S */ } void loop() { // wdt_reset(); if (millis() - timer > 10000) { Serial.println("reboot"); delay(1000); } }
Spiegazione del codice per riavviare Arduino quando si blocca:
- per evitare che il microcontrollore si riavvii, rimuovete il commento dal comando wdt_reset();, così il contatore verrà riavviato – altrimenti Arduino si riavvierà ogni 4 secondi.
Riavviare Arduino in modo Hardware (hard reset)
Un reset hardware riporta tutte le impostazioni della scheda Arduino ai valori predefiniti, ossia tutte le variabili vengono riportate ai valori originali e tutte le porte vengono disattivate e reinstallate. In altre parole, l’hard reset è un vero e proprio riavvio che avviene quando si preme il pulsante RESET. Ma questo reset può anche essere attivato dal codice applicando un segnale basso alla porta Reset di microcontrollore Arduino.
Programma per riavviare Arduino via hardware
unsigned long timer; void setup() { digitalWrite(13, HIGH); pinMode(13, OUTPUT); Serial.begin(9600); delay(100); Serial.println("start"); timer = millis(); } void loop() { if (millis() - timer > 10000) { Serial.println("reboot"); delay(100); digitalWrite(13, LOW); } }
Spiegazione del codice per riavviare Arduino via hardware:
- per evitare che il microcontrollore si riavvii, rimuovete il commento dal comando wdt_reset();, così il contatore verrà riavviato – altrimenti Arduino si riavvierà ogni 4 secondi.
Conclusioni. A volte è utile che Arduino si riavvii da solo senza dover premere il pulsante di RESET. Abbiamo considerato come riavviare scheda Arduino a livello software utilizzando tre esempi. Non dimenticate che usando il reset hardware dovete fare attenzione e impostare i valori corretti prima di resettare il microcontrollore. E se avete bisogno di un vero e proprio reset del microcontrollore, allora utilizzate l’hard reset di Arduino Uno.
Lascia un commento