Resetear Arduino desde código

Para reiniciar el Arduino sin pulsar el botón Reset, hay tres opciones – todas las cuales vamos a cubrir en este resumen. Es necesario reiniciar el Arduino Nano cuando el microcontrolador se cuelga o cuando funciona el módulo de radio nRF24L01, por ejemplo, cuando el transceptor pierde la comunicación y deja de funcionar. Reiniciar los transmisores de radio es difícil, pero reiniciar el Arduino Mega no es ningún problema.

Para esta actividad necesitaremos:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • protoboard
  • cables de conexion

Arduino resetear el código mediante programa

Un reinicio suave no es realmente un reinicio real del programa, sino simplemente un salto al principio del código (a la dirección cero). Es decir, el código comienza a ejecutarse desde el principio, sin afectar a la configuración de Arduino en el momento del reinicio suave. Por ejemplo, si en el momento del reinicio el microcontrolador estaba en «HIGH» en alguna salida, el valor no volverá por defecto a «LOW», sino que permanecerá en «HIGH».

Como resetear Arduino Uno por software (softreset)

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");
  }
}

Explicación sketch para soft reset Arduino por software:

  1. asm volatile(«jmp 0x00»); reinicia el programa desde el principio pero no reinicia los puertos, el comando puede ser usado en cualquier parte del código;
  2. en nuestro ejemplo, se produce un reinicio del programa cada 10 segundos.

Como reiniciar Arduino por software (Watchdog)

¿Cómo hacer un reset por software en Arduino? Para utilizar el Watchdog (Perro Guardian), se debe incluir el fichero avr/wdt.h y luego llamar a wdt_enable() en sketch. El Perro Guardian es un temporizador incorporado (hasta 8 segundos) que puede iniciarse o reiniciarse mediante programación. Tan pronto como el temporizador llega a cero, el controlador da una señal de reinicio y el Arduino Mega / Nano entra en un reinicio duro.

#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); // el temporizador debe reiniciarse cada 4 segundos
  /* posibles valores de la constante
  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(); // para que no haya reinicio, elimine el comentario
  if (millis() - timer > 10000) {
    Serial.println("reboot");
    delay(1000);
  }
}

Explicación sketch para Watchdog función reset Arduino:

  1. para evitar el reinicio del microcontrolador, eliminar el comentario de la wdt_reset(); comando, entonces el contador se reiniciará – de lo contrario el Arduino se reiniciará cada 4 segundos.

Reinicio del hardware de Arduino Nano (hard reset)

Como resetear de Arduino (hard reset)
Como resetear del hardware de Arduino (hard reset)

Un restablecimiento del hardware devuelve todos los ajustes de la placa a sus valores predeterminados, es decir, todas las variables se restablecen a sus valores originales y todos los puertos se desactivan y se vuelven a instalar. En otras palabras, un hard reset es un reinicio real que tiene lugar cuando se pulsa el botón RESET. Pero este reset también se puede llamar desde el código aplicando una señal baja al puerto Reset del Arduino.

unsigned long timer;

void setup() {
  digitalWrite(12, HIGH); 
  pinMode(12, OUTPUT);
  Serial.begin(9600);
  delay(100);
  Serial.println("start");
  timer = millis();
}

void loop() {
  if (millis() - timer > 10000) {
    Serial.println("reboot");
    delay(100);
    digitalWrite(12, LOW);
  }
}

Explicación sketch para hard reset Arduino por software:

  1. es importante establecer un nivel de señal alto en el pin 12 al inicio del programa, de lo contrario se producirá un reset;
  2. en el ejemplo el Arduino se reinicia cada 10 segundos.

Conclusión. Hemos visto cómo reiniciar el Arduino a nivel de software utilizando tres ejemplos. Recuerde que debe tener cuidado al utilizar el restablecimiento por hardware y establecer los valores correctos antes de restablecer el microcontrolador. Si necesitas un reinicio real del microcontrolador, utiliza un reinicio por hardware del Arduino (hard reset).


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *