Problema comunicazione xBee

Ciao a tutti, sto testando la comunicazione seriale tra due arduino UNO tramite moduli xBee pro s2 con scarsi risultati. Utilizzando xctu per “sostituirmi” ad uno dei due arduino, ho notato che se l’intervallo di trasmissione tra i pacchetti (array di 4 byte) è inferiore a 2500 ms, dopo due cicli non ricevo più con la squenza corretta i 4 byte di risposta, cioè a volte non arrivano o arrivano tutti quando interrompo il loop di trasmissione. ho provato diversi baudrate (2400, 9600 e 38400) senza risultati.
il codice dell’arduino ricevente è il seguente:

#define ID_PLC 0xCC
#define WAIT 0x6E
#define GO 0xFF
#define MAX_MILLIS_TO_WAIT 100
byte RFin[4] = {0x00, 0x00, 0x00, 0x00};
byte RFout[4] = {0x01, 0x00, GO, 0x02};
unsigned long start_time;
void setup()
{
  Serial.begin(38400);
  pinMode(A0, INPUT_PULLUP);
  pinMode(A1, INPUT_PULLUP);
  pinMode(A2, INPUT_PULLUP);
  pinMode(10, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
}

void loop() 
{   
  if (Serial.available())
  {
    start_time = millis();
    while ((Serial.available() < 4) && ((millis() - start_time) < MAX_MILLIS_TO_WAIT))
    {/*ASPETTA*/}
    if(Serial.available() < 4)
    {
      while(Serial.available())
        Serial.read(); //TIMEOUT EXCEPTION
    }
    else
    {
      for(byte index = 0; index < 4; index++)
        RFin[index] = Serial.read();
      if (RFin[0] == 0x01 && RFin[3] == 0x02)
      {
        if (RFin[1] == 0x00)
        {
          Serial.write(RFout, 4);
          delay(1);
          Serial.flush();
        }
        else if (RFin[1] == 0xCC && RFin[2] == 0xFF)
        {     
          digitalWrite(7, HIGH);
          digitalWrite(10, HIGH);
          while (!MPT_READ(0xEE))
          {}
          digitalWrite(7, LOW);
          digitalWrite(10, LOW);
        }      
      }
      else
      {
        for(byte index = 0; index < 4; index++)
          RFin[index] = 0x00;
      }
    }
  }
}
boolean MPT_READ(byte COMMAND)
{
  while (Serial.available() < 4)
  {/*ATTESA*/}
  for(byte index = 0; index < 4; index++)
    RFin[index] = Serial.read();
  if ((RFin[2] == COMMAND) && (RFin[0] == 0x01) && (RFin[3] == 0x02))
    return true;
  else return false;
}

allego gli screen di xctu con due diversi intervalli di tempo tra i tre pacchetti

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

Fatto, chiedo scusa.