Comunicacion serie.

Hola compañeros,
Os comento lo que estoy intentando hacer…
Estoy tratando de enviar un array de un arduino a otro mediante la libreria softwareserial a una velocidad de 56700 baudios.

*En el arduino emisor, cada vez que pulso reset mando un array dos veces uno a traves del puerto serie que crea la libreria software serial y otra a traves del puerto serie hacia el pc para ver que lo que quiero enviar se esta enviando bien.

*/
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

int ByteAMandar[4] = {01, 02, 0xA1, 0xE1}; 

void setup() {
  Serial.begin(57600);     
  mySerial.begin(57600);
  
     for (int i = 0; i < 4; i++) {
      mySerial.write(ByteAMandar[i]);
      Serial.write(ByteAMandar[i]);
        }
}

void loop() {


 
  }

*En el arduino receptor recojo el array por el puerto serie de la libreria software serial y luego lo envio a traves del puerto serie que va al pc.

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

byte ByteALeer[4];

void setup() {
  Serial.begin(57600);    
  mySerial.begin(57600);


}

void loop() {

     if (mySerial.available()){
     for (int i = 0; i < 4; i++) {
      ByteALeer[i]=mySerial.read();

    
     }
          for (int i = 0; i < 4; i++) {

      Serial.write(ByteALeer[i]);
    
     }
    }

 
  }

El problema surge que si recibo los bytes que estoy enviando pero tambien parece que recibo basura que no envio. Os dejo una captura de los dos puertos en el PC, el que aparece como COM16 es el emisor y el que aparece como COM7 es la captura del receptor.

No se si se vera bien en la imagen de la captura, el caso es que en el emisor aparece bien la trama #SOH#STX{A1}{E1} y en la del receptor no #SOH#STX{FF}{A1}{E1}{FF}, no se si alguien podria darme una mano.
Gracias de antemano.

SoftwareSerial usa una interrupción para las temporización de tiempo de bit. Es una emulación de una uart por software. Por lo general con velocidades altas no funciona bien.
Si deshabilitas la interrupción del timer 0 veras que igual te funciona, pero te quedas sin el contador de millis.
El microcontrolador atiende las interrupciones con una prioridad y quedan pendientes y no se atienden a tiempo las de softwareserial, con velocidades altas.
Si tienes que usar esa velocidad tendrás que usar los seriales 'de verdad' por ejemplo los que lleva el arduino mega.

Saludos.

Gracias por responder,
estoy usando dos arduinos nano, estos disponen de puerto serie adicional? o los pines en los que pone TX1 RX0 son los que van al puerto para programar?

Acabo de probar con dos arduino due que tienen varios puertos por hardware y el resultado es aun peor…

*CODIGO DEL EMISOR.

int ByteAMandar[4] = {01, 02,0xA1, 0xE1,}; 


void setup() {
  Serial.begin(57600);   
  Serial1.begin(57600);
  
     for (int i = 0; i < 4; i++) {
      Serial1.write(ByteAMandar[i]);
      Serial.write(ByteAMandar[i]);
        }
}

void loop() {

 

 
  }

*CODIGO DEL RECEPTOR

byte ByteALeer[4]; //


void setup() {
  Serial.begin(57600);     //
  Serial1.begin(57600);


}

void loop() {

     if (Serial1.available()){
     for (int i = 0; i < 4; i++) {
      ByteALeer[i]=Serial1.read();
      Serial.write(ByteALeer[i]);
    
     }

    }

 
  }

La trama resultante es aun peor o ocurre algo que ignoro #SOH{FF}{FF}#STX{FF}{FF}{A1}{FF}{FF}{E1}{FF}{FF}