Probleme serial read

Bonjour,
j'ai 2 arduino: un nano et un mega.
Je me suis créé 2 fonction de transfert et réception. Seul, ça fonctionne bien.
Mais quand j’intègre ces fonctions dans mon code et que je l’exécute, ça ne fonctionne plus.

J’utilise un soft serial (serial1) sur le nano et le serial1 sur le mega.

J'envoie depuis le nano "250"

Serial1.write(250);

Je reçois sur le mega "0"

Serial1.read()

Merci.

hello

pour t'aider, il nous faut :

code complet

et câblage complet

Désolé pour l'orthographe!
Pour le nano (celui qui reçois):

//#include <SoftwareSerial.h>                           // Library serial /!\ Commanter cette ligne sur Arduino mega
//SoftwareSerial Serial1(2, 3);                         // Port série virtuel pour le dialogue entre carte: TX, RX /!\ commanter cette ligne sur arduino mega

String read;                                            // Elément reçu sous forme de string
String buffer;                                          // Buffer de réception
String write;                                           // Elément a envoyer sous forme de string

//Tempo multi
int TempoNum;                                           // Numerot de la tempo a appeler
int TempoSible;                                         // Temps de pause

// Tempo multi. Renceigner sible (temps) et lire résultat (1 si ok)
//Trans,  0,   0,   0,   0,   0
int Tempo[3][6] = {{'0', '0', '0', '0', '0', '0'},      // Valeur sible
  {'0', '0', '0', '0', '0', '0'},                       // Valeur incrémenté
  {'0', '0', '0', '0', '0', '0'}                        // Resultat
};

//--------------------------------------------------------------------
void setup() {
  Serial.begin(9600);                                   // Démarage du port série Standard pour la com avec le moniteur
  while (!Serial);
  Serial1.begin(9600);                                  // Démarage du port serie virtuel à 115200
  while (!Serial1);
  TempoNum = 1;                                         // Numerot de la tempo TimeOut
  TempoSible = 10;                                      // Temps du Lost
  Temporisation ();
  Serial.println("Receve    Setup Complete!");          // Prét

}

//--------------------------------------------------------------------
void loop() {
  //delay(2000);
  Receve();                                             // Appelle la fonction
  /*if (read != "")
    {
    Serial.println("Ce qui est traite: " + read );

    } buffer = "";
    read = "";
    //Serial.println("on attend");
    delay(1000);*/
}

//--------------------------------------------------------------------
//Fonction de réception de String entre carte
void Receve ()
{
  //Serial.println("          EN RECEPTION");
  delay(171);
DebutRecep:
  TempoNum = 0;                                         // Numerot de la tempo TimeOut
  TempoSible = 5000;                                    // Temps du TimeOut
  Tempo[1][TempoNum] = 0;                               // On initialise le compteur
  Serial.flush();
  //-----------------------------DEMANDE DIALOGUE
  //Serial.println("                    DEMANDE DIALOGUE");
  delay(171);
  while (Serial1.read() != 251)                         // Attend que la demande soit acceptée
  {
    Serial1.write(250);                                 // Fait une demande de dialogue
    TempoNum = 0;                                       // Numerot de la tempo TimeOut
    Temporisation ();
    if (Tempo[2][TempoNum] == 1)
    {
      Serial.println("timeOut1");                       // TimeOut
      return;                                           // Sort de la boucle de réception
    }
  }
  //-----------------------------LIAISON EN COURS
  //Serial.println("                    LIAISON EN COURS");
  delay(171);
  TempoSible = 3000;                                     // Temps du TimeOut
  Tempo[1][TempoNum] = 0;                               // On initialise le compteur
  while (Serial1.available() <= 0)                      // Attend que le buffer soit plus vide
  {
    TempoNum = 0;                                       // Numerot de la tempo TimeOut
    Temporisation ();
    if (Tempo[2][TempoNum] == 1)
    {
      Serial.println("timeOut2");                       // TimeOut
      return;                                           // Sort de la boucle de réception
    }
  }
  //-----------------------------RECEPTION DU MESSAGE
  //Serial.println("                    RECEPTION DU MESSAGE");
  delay(171);
  buffer = "";                                          // Vide le buffer
  while (1 <= Serial1.available()) {                    // Le buffer de réception est il plein? Reçoie tout sauf le dernier Octet
    //Serial.println(Serial1.available());
    char c = Serial1.read();                            // Octet de réception en tant que caractère
    buffer += c;                                        // Ajoute le carractere dans le String buffer
  }
  read = buffer;                                        // Copie le buffer dans read
  //Serial.println("Recu avant validation: " + buffer);
  Serial.flush();                                       // Vide le buffer
  //-----------------------------AR DE RECEPTION
  delay(171);
  //Serial.println("                    AR DE RECEPTION");
  Serial1.write(252);                                   // Envoie l'AR pour message reçu
  Serial1.print(read);                                  // Envoie le message du String reçu pour verif
  Serial.flush();                                       // Vide le buffer
  TempoSible = 2000;                                    // Temps de pose
  Tempo[1][TempoNum] = 0;                               // On initialise le compteur
  //-----------------------------ATTENTE VALIDATION MESSAGE
  //Serial.println("                    ATTENTE VALIDATION MESSAGE");
  delay(171);
  while (Serial1.peek() != 253 && Serial1.peek() != 254)// Attend la réponse sur la validité du message
  {
    //Serial.println(Serial1.peek());
    Serial.flush();                                     // Vide le buffer
    TempoNum = 0;                                       // Numerot de la tempo TimeOut
    Temporisation ();
    if (Tempo[2][TempoNum] == 1)
    {

      Serial.println("timeOut3");                       // TimeOut
      return;                                           // Sort de la boucle de réception
    }
  }
  //-----------------------------ANALYSE REPONSE
  //Serial.println("                    ANALYSE REPONSE");
  delay(171);
  if (Serial1.read() == 253)
  {
    Serial.println("Message valide: " + read);
  }
  else
  {
    read = "";
    Serial.println("Nok");
  }
}

//--------------------------------------------------------------------
//Fonction 6 temporisation
int Temporisation ()
{
  if (Tempo[1][TempoNum] == 0)                          // Si la tempo démare
  {
    Tempo[0][TempoNum] = TempoSible;                    // On initialise le temps
  }
  if (Tempo[2][TempoNum] == 1)
  {
    Tempo[0][TempoNum] = TempoSible;                    // On initialise le temps
  }
  if (Tempo[1][TempoNum] < Tempo[0][TempoNum])          // Si la tempo n'est pas terminée
  {
    Tempo[1][TempoNum]++;                               // On incrémente
    Tempo[2][TempoNum] = 0;                             // C'est pas fini
    delay(1);
  }
  else                                                  // Temps écoulé
  {
    Tempo[0][TempoNum] = 0;                             // Initialisation
    Tempo[1][TempoNum] = 0;                             // Initialisation
    Tempo[2][TempoNum] = 1;                             // C'est fini
  }
}

Pour le mega, juste la fonction car c'est trop lourd:

void Send()
{
DebutEmit:
  TempoSible = 5000;                                       // Temps du TimeOut
  Tempo[1][TempoNum] = 0;                                // On initialise le compteur
  //-----------------------------ATTENTE DIALOGUE
  //Serial.println("                    ATTENTE DIALOGUE");
  delay(171);
  while (Serial1.peek() != 250)                            // Attend une demande de dialogue
  {
    TempoNum = 0;                                          // Numerot de la tempo TimeOut
    Temporisation ();
    if (Tempo[2][TempoNum] == 1)                           // Si fin de la tempo
    {      
      Serial.println("timeOut");                           // TimeOut
      return;                                              // Sort de la boucle de réception
    }
  }Serial.println(Serial1.read());
  Serial1.write(251);                                      // Demande acceptée
  //-----------------------------TRANSFERT MESSAGE
  //Serial.println("                    TRANSFERT MESSAGE");
  delay(171);
  //Serial.println("On est en liaison");
  //Serial.println("On peu transferer");
  Serial1.print(write);                                    // Envoie le message du String write
  Serial.flush();                                          // Vide le buffer
  buffer = "";                                             // Vide le buffer
  TempoSible = 1000;                                      // Temps du TimeOut
  Tempo[1][TempoNum] = 0;                                // On initialise le compteur
  //-----------------------------ENVOIE AR
  //Serial.println("                    ENVOIE AR");
  delay(171);
  while (Serial1.read() != 252)                            // Attend l'AR de réception
  {
    TempoNum = 0;                                          // Numerot de la tempo TimeOut
    Temporisation ();
    if (Tempo[2][TempoNum] == 1)
    {
      Serial.println("timeOut");
      return;
    }
  }
  //-----------------------------ECHO POUR CTRL
  //Serial.println("                    ECHO POUR CTRL");
  delay(171);
  while (Serial1.available() <= 0)
  {
  }
  TempoSible = 1000;                                      // Temps du TimeOut
  while (1 <= Serial1.available()) {   // Reçoie tout sauf le dernier Octet
    char c = Serial1.read();           // Octet de réception en tant que caractère
    buffer += c;                       // Ajoute le carractere dans le String buffer
    TempoNum = 0;                                          // Numerot de la tempo TimeOut
    Tempo[1][TempoNum] = 0;                                // On initialise le compteur
    Temporisation ();
    if (Tempo[2][TempoNum] == 1)
    {
      Serial.println("timeOut");
      return;
    }
  }
  //Serial.println("On envoie               : " + write);
  //Serial.println("On recois pour controle : " + buffer);
  Serial.flush();                         // Vide le buffer
  //-----------------------------ENVOIE REPONSE
  //Serial.println("                    ENVOIE REPONSE");
  delay(171);
  if (buffer == write)
  {
    Serial.println("ok");
    Serial1.write(253);
  }
  else
  {
    Serial.println("Nok");
    Serial1.write(254);
    goto DebutEmit;
  }
  //Serial.println("                    FIN");
  return;
}

J'ai trouvé, je m’étais planté sur le baud rate.
Merci quand même!