Come resettare Arduino via software / hardware

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:



  1. 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;
  2. 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:

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

Come utilizzare il pin RESET sulla Arduino
Come utilizzare il pin RESET sulla scheda Arduino

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:

  1. 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.

5/5 - (1 vote)


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.