Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

07/12/2014 #1


codigo no funciona bien arduino
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="";
}
08/12/2014 #2

Avatar de JoaquinFerrero

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().
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Arduino y Raspberry Pi

Cerrar
Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.