Monitor serie no ejecuta acciones

Buenas a todos.
Estoy siguiendo un curso y como parte del seguimiento del mismo DOS de los ejercicios consisten en decirle al monitor serie qué LED encender y el otro igual pero a un led RGB.
La cosa está en que cuando indico cuál tiene que encender (escribo al monitor serie) no hace nada.
He repasado código y conexiones así como he probado en copiar directamente el código del profesor.
Tengo un Arduino Uno (kit de Amazon). Creo que el problema puede estar relacionado con los baudios (pero he probado a indicar los mismos tanto en en programa como en el monitor serie y NADA).
He probado tanto con el programa hecho por el profesor, como con otras opciones y no me funciona .
Debo incluir que en el primero de los códigos trabajando a los baudios que pone en el programa facilitado por el profesor, el monitor serie me da caracteres extraños y en cambio le pongo (9600baudios) si que me formula bien la pregunta en el monitor, pero ninguno ejecuta la respuesta.

Ambos códigos al profesor le funcionan, con que creo que es algo de la configuración.
Espero que me podáis ayudar, os facilito ambos códigos.
Gracias por vuestra ayuda.

Código 1 (El que comento que cambio los baudios a 9600):

int greenPin = 13;

int redPin = 12;

int bluePin =11;

String ledColor;

String msg1 = "Escribe un color de led";



void setup() {

  // put your setup code here, to run once:

Serial.begin(115200);

pinMode(greenPin,OUTPUT);

pinMode(redPin,OUTPUT);

pinMode(bluePin,OUTPUT);


}


void loop() {

  // put your main code here, to run repeatedly:

Serial.println();

Serial.println(msg1);

while (Serial.available() == 0){

 

}


ledColor = Serial.readString();


if (ledColor == "verde" || ledColor == "VERDE"){

  digitalWrite(greenPin,HIGH);

  digitalWrite(redPin,LOW);

  digitalWrite(bluePin,LOW);

 

}

if (ledColor == "rojo" || ledColor == "ROJO"){

  digitalWrite(greenPin,LOW);

  digitalWrite(redPin,HIGH);

  digitalWrite(bluePin,LOW);

 

}

if (ledColor == "azul" || ledColor == "AZUL"){

  digitalWrite(greenPin,LOW);

  digitalWrite(redPin,LOW);

  digitalWrite(bluePin,HIGH);

 

}


}

y el codigo del ejercicio RGB

int redPin= 11;

int greenPin = 10;

int bluePin = 9;

String color;

String msg1 = "Por favor elige un color";


void setup() {

  // put your setup code here, to run once:

Serial.begin(9600);

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

}


void loop() {

  // put your main code here, to run repeatedly:

Serial.println();

Serial.println(msg1);

while (Serial.available() == 0);{

 

}


color = Serial.readString();


if (color == "rojo"){

  digitalWrite(redPin, HIGH);

  digitalWrite(greenPin, LOW);

  digitalWrite(bluePin, LOW);

}



if (color == "verde"){

  digitalWrite(redPin, LOW);

  digitalWrite(greenPin, HIGH);

  digitalWrite(bluePin, LOW);

}



if (color == "azul"){

  digitalWrite(redPin, LOW);

  digitalWrite(greenPin, LOW);

  digitalWrite(bluePin, HIGH);

}


if (color == "cian"){

  analogWrite(redPin, 0);

  analogWrite(greenPin, 255);

  analogWrite(bluePin, 255);

}


if (color == "magenta"){

  analogWrite(redPin, 255);

  analogWrite(greenPin, 0);

  analogWrite(bluePin, 255);

}


if (color == "amarillo"){

  analogWrite(redPin, 255);

  analogWrite(greenPin, 255);

  analogWrite(bluePin, 0);

}


if (color == "naranjado"){

  analogWrite(redPin, 255);

  analogWrite(greenPin, 100);

  analogWrite(bluePin, 0);

}

}

Hi,
Que IDE usa el 1.8 o el 2.x? Cuando tienes caracteres chinos esto quire decir que los baldios no esta configurado corectamente. Debes de configurar el de IDE con el que esta en el setup. Segundo me imagino que puedes bajar el sketch al arduino ya que no mencionas que te este dando errores de que no encuentra el puerto.

Si el programa compila correctamente y lo puedo cargar, disculpa pero soy nuevo y no se a que te refieres, si te refieres a la versión del Arduino es IDE2.2.1

Hi,
Como tu abres para que la infomacio te aparesca en el IDE? Recuerda que tienes que abrir el serial para que aparesca en el IDE. Esto se hace dondole click con el mouse en la primera linea del IDE a la derecha. cuando ejecuta esto en el medio del IDE debe aparecer un mensaje que dice OUTPUT SERIAL MONITOR X. Perdona pero yo uso el IDE en ingles.

Primera parte corregida.
debes agregar .trim al String porque te agrega /r /n y por eso no responde a "rojo" "verde" o "azul" porque ver "rojo/r/n" y los demas igual.

int greenPin = 13;
int redPin   = 12;
int bluePin  = 11;

String ledColor = "";
String msg1 = "Escribe un color de led";
bool rojo = false, 
        azul = false, 
        verde = false;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  pinMode(greenPin, OUTPUT);
  pinMode(redPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  digitalWrite(greenPin, LOW);
  digitalWrite(redPin, LOW);
  digitalWrite(bluePin, LOW);
}


void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(msg1);
  while (Serial.available() == 0) {
  }
  if (Serial.available() > 0) {
      ledColor = Serial.readString();
      ledColor.trim();  
      Serial.print(ledColor + " ");
      if (ledColor == "verde" || ledColor == "VERDE") {
        verde = !verde;
        Serial.println(verde);
        digitalWrite(greenPin, verde? HIGH : LOW);        
        digitalWrite(redPin, LOW);
        digitalWrite(bluePin, LOW);
      }

      if (ledColor == "rojo" || ledColor == "ROJO") {
        rojo = !rojo;
        Serial.println(rojo);
        digitalWrite(greenPin, LOW);
        digitalWrite(redPin, rojo ? HIGH: LOW);
        digitalWrite(bluePin, LOW);
      }

      if (ledColor == "azul" || ledColor == "AZUL") {
        azul = !azul;
        Serial.println(rojo);
        digitalWrite(greenPin, LOW);
        digitalWrite(redPin, LOW);
        digitalWrite(bluePin, azul ? HIGH : LOW);
      }
 }
}
1 Like

No me funciona copañero , el error no es de codigo.

El código funciona compañero, esta probado

1 Like

Buenas compañero.
Compilo el programa, lo cargo en la tarjeta y luego abro el monitor serie, me fijo en que los baudios sean correctos tanto en el programa como en el monitor serie , entonces en la barra le indico el color y no me enciende ningún led y me vuelve a formular la pregunta.
El profesor carga ese mismo código y funciona correctamente.
No se si te refieres a eso.
Agradezco que intentes ayudarme y tu paciencia, soy nuevo en esto.

Si, si plena confianza en tu código como en el que os envió yo, pero al cargarlos en mi tarjeta no me funciona.

Entonces tienes alguna conexión errada o falso contacto.
Revisa bien.

1 Like

Hi,
Corri tu programa y se ven los mensajes en el IDE.

1 Like

Hi,
Adjunto foto de mi IDE cuando activo el IDE para ver los mensajes. Tu vez en el medio un espacio que divide el IDE donde esta el sketch y donde esta el area donde se recibe los mensajes. Como puedes ver a la izquierda dice OUTPUT SERIAl Monitor X. El tuyo se ve identico a la foto.

he probado a borrar el codigo y empleando la misma confi hacer simplemente digital write HIGH y si que me encienden :persevere: :persevere:

1 Like

se ve lo mismo si.

Output Serial Monitor X
Mensaje... new line baudios XXXX

Hi,
Que computadora usas y version del software.Usa windows ,linuz o apple.

hola.
Utilizo una Elegoo UNO R3
Windows 10 y version de arduino IDE2.2.1

Hi,
Aqui el problema es que puedes bajar el sketch y no tienes errores bajando el sketch pero no recibe el printout por lo tanto estas comunicandote con la tarjeta. Esa tarjeta tiene LEDs para el rxy y tx. Haz una cosa corre el programa y mira a ver si el led del Rx prende y se apaga. Si prende y se apaga quire decir que esta enviando la informacion.

1 Like

En el momento que doy enter para enviar el mensaje se enciende por un instante.

Mas sencillo aun pero el mismo problema, baudios configurados de igual manera tanto en el programa como en el monitor .
Mi profesor lo corre y funciona sin problemas pero a mi no.

int buzzPin = 8;
int number;
String msg1 = "Por favor introduce tu número";
int dt = 500;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(buzzPin, OUTPUT);
  }

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println();
  Serial.println(msg1);
  while (Serial.available() == 0) {

  }
  number = Serial.parseInt();

  if (number > 10){
   digitalWrite(buzzPin, HIGH);
   delay(dt);
    digitalWrite(buzzPin, LOW);
  }

}

Hi,
Eso indica que esta enviando la informacon. Aqui pueden haber varios causas, Primero el cable,segundo una mala coneccion y tecero el puerto de la computadora. Se ocure una cosa para segurarnos corre el programa de blink. Este esta en los ejemplos. Este debe prender el led en la tarjeta y apagarla. Asi sabemos que el sketch se esta bajando correctamente a la tarjeta del arduino.