Error con la comunicación serie

Hola, soy nuevo por aquí. Os quiero consultar una duda que me está volviendo loco...

Estoy intentando comunicar dos Arduinos por el serie del arduino, conectando el Tx con el Rx del otro Arduino. Comparten masa y alimentación. Hasta aquí todo correcto. La idea es que quiero enviar 15 bytes con información de uno al otro, el problema es que en recepción llegan muchos fallos, del orden de aproximadamente el 15% de fallos. Por lo que he leído el porcentaje debería de ser inferior al 0,01%.

He probado con casi todo, he comprobado que el primer arduino envía correctamente los bytes, y efectivamente lo hace. La alimentación la he cambiado varias veces, y el código de envío y recepción de datos ya ni lo se.

Alguien sabe donde puede estar el fallo? A alguien le ha pasado esto?

Gracias por adelantado.

Saludos

Por si te pudiera servir de ayuda en última instancia, a mí me pasaba cuando me comunicaba con el router Linksys. Al final opté en utilizar redundancia. En ese caso el router enviaba temperaturas, y lo hacía por duplicado. Si en recepción, esos datos duplicados no coincidían, los desechaba.

Espero resuelvas el problema.

Es raro lo que cuentas...

¿Puedes explicar ó un diagrama de cómo los tienes conectados (incluido las masas)? ¿Qué distancia hay entre Arduinos? ¿Qué velocidad de comunicación? ¿Has probado individualmente, transmitiendo con el ordenador hacia el arduino que recibe y viceversa? (para estar seguro que ambos programas funcionan bien).

Kayak: yo no he tenido problemas con el Linksys.

;)

Gracias por contestar tan rápido:

¿Puedes explicar ó un diagrama de cómo los tienes conectados (incluido las masas)?

Tengo conectados el Rx de uno con el Tx del otro. Las masas conectadas y la alimentación también. No puedo hacer un esquema ahora mismo porque no estoy en pi pc.

¿Qué distancia hay entre Arduinos?

El cable es de unos 50cm. Pero pretendia que funcionase con un cable de unos 4 metros. ¿Habrá algún problema por ello?

¿Qué velocidad de comunicación?

He probado varias, y en todas me da la misma tasa de error, pero con las que he hecho la gran parte de las pruebas es de 38400 baudios (creo). Los arduinos son de 16Mhz.

¿Has probado individualmente, transmitiendo con el ordenador hacia el arduino que recibe y viceversa? (para estar seguro que ambos programas funcionan bien).

Enviando la info al pc, desde el emisor todo funciona correctamente. He probado a enviar desde este emisor y desde el pc las mismas tramas pero en todo caso existe fallo en el receptor. Puede que el fallo esté ahí, aunque la verdad, no lo creo.

Cuando pueda cuelgo el programa de recepción.

Saludos

Pongo el trozo del código que se encarga de decodificar la señal:

void decode6(void)
{
  static char buffer[4];
  static int pulso=0;
  static int desv=0;
  
  while(Serial.available() >=15) //Se comprueba si hay un paquete en el puerto serie esperando
  {
    for (int counter=0;counter<=3;counter++)  //Leemos todo el paquete
      {
        buffer[counter]=Serial.read();
      }

    if(strncmp (buffer,"SIVV",4) == 0) //Se comprueba si la cabecera concuerda con la que debería
      {
        for(int canal=1;canal<=11;canal++)
        {
          pulso=Serial.read();
          if (pulso>0 && pulso<250)
          {
            desv=abs(ch[canal] - pulso);
            if (desv > 2)
            {
              ch[canal]=map(pulso,0,250,800,2200);
            }
          }
        }
      }
  }
}

Espero que me podáis ayudar.

Saludos

Como idea para comprobar si tu código esta bien, podrías ir sacandote información por el puerto serie para depurar. Así ves si tu programa de recibir es correcto... Desde el PC vas mandado la trama y vas viendo si se comporta como quieres....