codigo no funciona bien arduino

#1
Hola amigos, necesito una pequeña ayuda.
Tengo que hacer un envío de mensajes de un arduino a otro a través de I2C, el problema es que no consigo enviar bien el mensaje.
Por ejemplo, al escribir la palabra hola, la está enviando 5 veces.
Dejo el código por si me pueden ayudar.

Saludos.
Código:
 #include <Wire.h>
 #include <LiquidCrystal.h>
 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


 char cadena[8];

 void setup()
 {

    Wire.begin(); // join i2c bus (address optional for master)
    lcd.begin(16, 2);
    Serial.begin(9600); 
 }
 
String mensaje = "";
 
 void loop() {
      leerCadena();
      delay(500);
 }
 
 void leerCadena(){
  
 if(Serial.available() ){
   
 //se lee un caracter
 char caracter = Serial.read();

 //se suma un caracter para formar el mensaje
 mensaje += caracter;
  ((String)mensaje).toCharArray(cadena,8);
 
 leerCadena();
 enviar();
 }
 }
 
void enviar(){
Wire.beginTransmission(4);
Wire.write(cadena);
Wire.endTransmission();
Serial.println(cadena);
mensaje="";
}
 
Última edición por un moderador:
#2
La está enviando cinco veces porque "hola\n" tiene cinco caracteres.

El problema es que estás llamando a leerCadena dentro de sí misma, antes de enviar(). Si envías cinco caracteres, leerCadena se llama cinco veces, y luego regresa (con cinco niveles de profundidad), llamando cinco veces a enviar(), que enviará 'cadena' que en ese momento tiene la cadena completa.

Es mejor que conviertas el if (Serial.available)... en un bucle while (Serial.available). Dentro de él vas acumulando caracteres a cadena. Fuera del bucle (cuando ya no haya más caracteres que leer), les envías (enviar()). Y regresas. El loop() ya se encargará de volver a leerCadena().
 
Arriba