Muchas veces, al trabajar con una placa Arduino Uno, es necesario reiniciarla sin intervención física, ya sea porque el dispositivo se encuentra en un lugar de difícil acceso o porque queremos automatizar el proceso dentro del código. Afortunadamente, existen varios métodos para realizar un reset de Arduino Uno por software, cada uno con sus ventajas y aplicaciones específicas.
En este artículo veremos diferentes formas de reiniciar un Arduino Uno a través del código, desde el uso de punteros de función hasta el empleo de pines digitales para generar un reset externo. También exploraremos el funcionamiento del reset automático al conectar por puerto serie y cómo evitarlo si genera problemas en nuestros proyectos.
Resetear Arduino Uno mediante punteros de función
Uno de los métodos más utilizados para reiniciar un Arduino Uno desde el código es el uso de un puntero de función. La idea es asignar la dirección de memoria 0 a un puntero de función y llamarlo para que el procesador ejecute un reinicio del sistema. Puedes aprender más sobre proyectos relacionados en la guía de Arduino Uno.
El código básico para este método es el siguiente:
String letra = "";
int x = 2;
void(* resetSoftware)(void) = 0;
void setup(){
Serial.begin(9600);
Serial.println("Iniciando.");
}
void loop() {
if (Serial.available() > 0) {
letra = Serial.readString();
Serial.println(letra);
if(letra.indexOf("v") > -1){
x = x + 5;
Serial.println(x);
Serial.println("Reseteado.");
delay(500);
resetSoftware();
}
}
}
En este caso, cuando se envía la letra «v» al Monitor Serie, la placa suma 5 a la variable x, imprime el nuevo valor y luego ejecuta el reseteo invocando resetSoftware(). Esto devuelve el microcontrolador a su estado inicial como si se hubiera pulsado el botón de reset. Para otros métodos de programación, puedes consultar la guía sobre el uso de millis en Arduino.
Reset de Arduino Uno usando un pin digital
Otra forma de realizar un reseteo por software es conectando un pin digital al pin de reset de la placa. Esto se logra mediante un simple cable entre un pin de salida (como el 10) y el pin RESET del Arduino. Este método es útil si buscas una solución rápida sin modificar el bootloader.
El código para este método es el siguiente:
String letra = "";
int x = 2;
void setup(){
digitalWrite(10, HIGH);
Serial.begin(9600);
Serial.println("Iniciando.");
pinMode(10, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
letra = Serial.readString();
Serial.println(letra);
if(letra.indexOf("v") > -1){
x = x + 5;
Serial.println(x);
Serial.println("Reseteado.");
delay(500);
digitalWrite(10, LOW);
}
}
}
En este caso, al enviar la letra «v» por el Monitor Serie, se baja el estado lógico del pin 10, lo que produce un reset en la placa. Es una alternativa práctica cuando se necesita reiniciar el sistema desde el software sin modificar el código del bootloader. Si necesitas más información sobre la conectividad de Arduino, te recomendamos leer sobre Arduino Nano.
Reseteo automático de Arduino al conectarlo por puerto serie
Las placas Arduino Uno tienen un mecanismo de reseteo automático cuando se establece una conexión a través del puerto serie. Esto ocurre porque la línea DTR del chip ATmega8U2 está conectada mediante un condensador de 100 nF a la línea de reset del procesador ATmega328. Al activarse la DTR, se genera un pulso en la línea de reset que provoca el reinicio del Arduino. Esto es una característica útil en muchos proyectos, como los que involucran pantallas OLED, que puedes explorar en la guía sobre pantallas OLED de 0.96″.
Este mecanismo permite que el gestor de arranque tenga un tiempo de espera más corto y facilita la carga de nuevos programas sin necesidad de presionar el botón de reset manualmente. Sin embargo, en algunos casos, esto puede ser un inconveniente si el código depende de una conexión serie constante.
Cómo evitar el reseteo automático al usar USB
Si el reseteo automático al conectar el Arduino a un ordenador causa problemas en el funcionamiento del proyecto, hay una solución sencilla para deshabilitarlo. La placa incluye una pequeña pista que se puede cortar para evitar este comportamiento. Esta modificación se puede realizar fácilmente si conoces las bases de la electrónica, como se explica en la guía sobre controladores de motores paso a paso.
Para hacerlo, basta con localizar la pista en la parte inferior de la placa cerca del conector USB y cortarla con un cutter o un bisturí. Si en el futuro se necesita restaurar la función de reinicio automático, se puede volver a habilitar soldando un pequeño puente entre los dos puntos de la pista.
Conocer cómo deshabilitar el reseteo automático proporciona mayor control sobre el comportamiento del Arduino al recibir datos desde la computadora. Dominar estos métodos para resetear un Arduino Uno brinda mayor flexibilidad en el desarrollo de proyectos electrónicos, permitiendo automatizar, depurar y mejorar el comportamiento de los sistemas embebidos sin la necesidad de intervención manual.