Problema con comunicacion serial

Que tal comunidad, recurro a ustedes por que tengo un problema.
Estoy haciendo un codigo con el cual controlo el encendido y apagado de luces atraves del puerto serial de una arduino uno, los pines estan conectados a unos reles para efectuar la funcion, el programa funciona bien pero si se cierra y se abre de nuevo el serial plotter los pines se apagan y necesito que mantengan su estado, de antemano agradezco de su ayuda, adjunto mi codigo

int Cuarto1=1;
int Cuarto2=2;
int Cuarto3=3;
int Cuarto4=4;
int Cuarto5=5;
int Cuarto6=6;
int Cuarto7=7;
int Cuarto8=8;
int Cuarto9=9;
int Cuarto10=10;
int Cuarto11=11;
int Cuarto12=12;
int Cuarto13=13;
int estado=LOW;


void setup() {
  // put your setup code here, to run once:
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
Serial.begin(9600);
pinMode (Cuarto1, OUTPUT);
pinMode (Cuarto2, OUTPUT);
pinMode (Cuarto3, OUTPUT);
pinMode (Cuarto4, OUTPUT);
pinMode (Cuarto5, OUTPUT);
pinMode (Cuarto6, OUTPUT);
pinMode (Cuarto7, OUTPUT);
pinMode (Cuarto8, OUTPUT);
pinMode (Cuarto9, OUTPUT);
pinMode (Cuarto10, OUTPUT);
pinMode (Cuarto11, OUTPUT);
pinMode (Cuarto12, OUTPUT);
pinMode (Cuarto13, OUTPUT);




}

void loop() {
  // put your main code here, to run repeatedly:
if (Serial.available()){
  char numero=Serial.read();
  
  if (numero== 'A'){
    estado=digitalRead (Cuarto1);
    digitalWrite(Cuarto1, !estado);
  }
   if (numero== 'B'){
    estado=digitalRead (Cuarto2);
    digitalWrite(Cuarto2, !estado);
  }
   if (numero== 'C'){
    estado=digitalRead (Cuarto3);
    digitalWrite(Cuarto3, !estado);
  }
   if (numero== 'D'){
    estado=digitalRead (Cuarto4);
    digitalWrite(Cuarto4, !estado);
  }
   if (numero== 'E'){
    estado=digitalRead (Cuarto5);
    digitalWrite(Cuarto5, !estado);
  }
   if (numero== 'F'){
    estado=digitalRead (Cuarto6);
    digitalWrite(Cuarto6, !estado);
  }
   if (numero== 'G'){
    estado=digitalRead (Cuarto7);
    digitalWrite(Cuarto7, !estado);
  }
   if (numero== 'H'){
    estado=digitalRead (Cuarto8);
    digitalWrite(Cuarto8, !estado);
  }
   if (numero== 'I'){
    estado=digitalRead (Cuarto9);
    digitalWrite(Cuarto9, !estado);
  }
   if (numero== 'J'){
    estado=digitalRead (Cuarto10);
    digitalWrite(Cuarto10, !estado);
  }
   if (numero== 'K'){
    estado=digitalRead (Cuarto11);
    digitalWrite(Cuarto11, !estado);
  }
   if (numero== 'L'){
    estado=digitalRead (Cuarto12);
    digitalWrite(Cuarto12, !estado);
  }
   if (numero== 'M'){
    estado=digitalRead (Cuarto13);
    digitalWrite(Cuarto13, !estado);
  }
}
}
``

Hola, con que Arduino estas trabajando, el problema es que cuando se abre el puerto serial el Arduino se reinicia, por lo que si quieres solucionar el problema tienes dos opciones.

  • Cortar una pista que tiene para deshabilitar el reinicio mediante el puerto serial, esto te puede causar dos problemas, que al conectar el Arduino se bloquee la comunicación, y que para programar el microcontrolador necesitas aplastar manualmente el botón de reinicio.
  • Utilizar la EEPROM para guardar el ultimo estado del interruptor cuando cambia, y al reiniciar el arduino leer el estado almacenado en la EEPROM, pero igual tendrás un pequeño tiempo en el que se apaguen y vuelvan a encender.
1 Like

Hola. ¿Y si utilizas la lógica inversa en los relés? (Si te lo permiten). En reposo estarían las luces encendidas. Creo que en tu programa bastaría con poner al inicio las salidas LOW en vez de HIGH para que en el ciclo la siguiente pulsación la apagase como hace ahora.

1 Like

Serial() utiliza los pines 0 y 1, así que cuando usas Serial() debes dejarlos libres, sin conectar.

ArduinoUno-Pines0y1

1 Like

Perdón. Me he dado cuenta que lo que tú quieres es que se mantengan en el estado que estaban; no que cuando se desconecte se activen. Dije una tonteria, perdón.

1 Like

Por ahora estoy utilizando una arduino
Uno pero lo migraré a una mega. Intente la primera opción pero se mantiene reiniciando a pesar de que elimine la unión de pistas, de antemano gracias por responder

Gracias por la observación, así es, no estoy utilizando esos puertos, gracias por responder

Parece que estás usando el pin 1, aunque tal vez no lo tengas conectado...

Si lo vas a migrar a una Mega entonces la solución es sencilla.
Usas otro puerto serie, por ej. Serial1, y lo conectas al PC por medio de una interfaz USB-TTL.
Entonces, usas el puerto Serial solo para subirle el código y Serial1 para monitoreo y control.
De esa forma evitas el problema del reinicio.

Si vas a usar un Mega entonces usa el Mega, para que preguntar algo con un UNO si luego se va a usar un Mega? No es coherente.

Ahora si con el Mega se presentara un problema, plantea el problema con ese microcontrolador.
Consultar algo referido a elementos que no usarás, para mi no es una consulta adecuada.
Diferente sería si fuera algo de programación porque los códigos son similares, esto en cambio es hardware y el hardware es propio de la placa con la que se trabaja.

Para terminar: todos nos equivocamos, yo también lo hago. Solo tenlo presente. Y algo muy importante, en tu presentación del problema (post#1) no dices nada del Mega. Siempre danos toda la idea, el contexto como yo lo llamo. Aunque sea vaga la idea general al comienzo, transmite todo lo que quieres hacer para que entandamos mejor el problemas y podamos guiarte mas adecuadamente.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.