Pregunta: Lectura de datos por puerto de serie.

Hola a todos. Siguiendo con mi aprendizaje en la plataforma decidí hacer un pequeño ejercicio de practica para ver el uso de funciones con Arduino. Por esta parte bien, sin embargo me he encontrado con la cuestión de que no consigo leer valores paso por paso a traves del monitor de serie del IDE de Arduino. Me explico:

Estando acostumbrado a Java, esperaba que con este codigo que os muestro a continuación me imprimiera por pantalla "Inserte frase n1: ", esperara a que le enviara un dato, continuara imprimiendo "Inserte frase n2: " y volviera a esperar a que le enviara un dato.

void setup(){
  
  Serial.begin(9600);  // Abre la conexión con el puerto de serie
  Serial.println("Presione \"l\" para unir frases...");
}

void loop() {
  
  if (Serial.available() > 0) {
    String opt = Serial.read();
    
    if (opt == 108) {    // Entra si presionamos l, "108" en ASCII. 
      
      Serial.println("Inserte frase n1: ");
      String frase0 = Serial.read();
      Serial.println("Inserte frase n2: ");
      String frase1 = Serial.read();
      Serial.println(uneFrase(frase0,frase1));  // imprime el resultado de la llamda a la funcion "uneFrase"
    }
  }
}

String uneFrase(String x, String y){
  
  String frase3 = x + y;
  return frase3;
}

Sin embargo para mi decepción, al pulsar "ele" el programa imprime tanto "Inserte frase n1: " como "Inserte frase n2: " sin esperar a que le envie los datos.

Mi pregunta es clara, ¿Cómo puedo hacer para que espere a que le mande los datos?, ¿Estoy enfocando el problema mal?

Muchas gracias a todos, salu2¡

P.S.: no he comentado todo el código pero no creo que sea necesario.

Tienes un par de fallos de concepto:

  • No puedes declarar variables en un loop ya que no es bueno estar declarándolas continuamente
  • Serial.read(), no funciona de la misma forma que un fread o cin en un PC

Para éstas cosas exite la referencia/documentación que te explica para qué sirve cada función y cómo debe usarse: Serial - Arduino Reference

Un saludo

Nuevamente muchas gracias Chiva por tu ayuda. No habia caido yo en la declaración que se hacía una y otra vez al tenerlas ahí. Prometo ser bueno y leer la documentación a partir de ahora jeje :p. A ver si encuentro la solución a mi problema. Salud2¡

Me sabe mal mandaros a la referencia, ya que queda un poco, "déjame en paz", pero de ahí es de donde saco el 70% de las respuesta que doy (y donde se explica todo con ejemplos), otro 20% de la parte inglés del foro y el otro 10% de experiencia personal.

Y si aún con la referencia no entiendes algo, no dudes en preguntarnos :wink: