Datenverlust bei XBeeS2-Kommunikation

Hi habe ein kleines Netzwerk mit 3 Xbees Series 2, die auf Arduino- Fio angeschlossen sind aufgebaut und anhand von XCTU einen Sensorknoten(Arduino Fio + Xbee) als Coordinator festgelegt und die anderen beiden Knoten (Arduino Fio + XBee S2 + Temperatursensor) als Enddevices festgelegt. Nun möchte ich, dass der Coordinator via XBEE Befehlszeichen an den Enddevices senden soll, damit die beiden Enddevices wissen welche Daten sie an dem Coordinator senden müssen. Da der Coordinator das Befehlszeichen an beiden senden soll habe ich beim Coordinator als Destination Address(High+Low) 0(High) , FFFF(Low) angegeben, dass laut Digi für das Broadcasting ist. Bei den Enddevices habe ich 0(High), 0(Low), d.h. die zu sendenden Daten sollen an dem Coordinator gehen.

Beim Testen habe ich es ausprobiert zuerst über den Serial Monitor von XCTU, indem ich über den Serial Monitor die Befehlszeichen an den Enddevices gesendet habe und es ging einwandfrei. Sobald ich aber das alles automatisiert über den Arduino Fio mit dem Coordinator laufe lasse, überspringen bzw bekommen die Enddevices ab und an die Kontrollzeichen nicht. Was könnte das Problem sein, ist es vllt viel zu schnell für die Enddevices, dass Sie das ankommende Zeichen verpassen? Habe vieles Ausprobiert, aber das Problem besteht leider noch. Wo ist der Fehler?

Hier ein Stück meines Codes zum Coordinator und Enddevices:

Coordinator:

State INIT()
{
  //Sende kontrollzeichen ! an Enddevice, damit 40 datensätze 
  //vom Enddevice gesendet werden
  Serial.println('!');
  while (Serial.available())
  {
    //*Coordinator empfängt Datensätze von Enddevice
    //Frage erstes ankommendes Zeichen an
    char inSign = (char)Serial.read();
    //Falls B --> Daten von Brustkorb-Node
    if (inSign == 'B')
    {
      for(int count=0; count<40;count++)
      {
        //Lese String bis zum ; und speichere in Accel_B ab
        Accel_B = Serial.readStringUntil(';'); 
        Serial.read(); //Nächstes Zeichen ist ; somit können wir es auslesen ohne zu speichern
        //Lese Zweiten Teil nach dem ; bis zum '\n' und speichere 
        Gyro_B = Serial.readStringUntil('\n');
        MagAccel_B[count] = Accel_B.toFloat(); //wandle in float um und speichere in Array
        MagGyro_B[count] = Gyro_B.toFloat(); //wandle in float um und speichere in Array
      }//end for   
    }//end if
    //Falls O --> Oberschenkel
    if(inSign == 'O')
    {
      for(int count1=0; count1 <40; count1++)
      {
        //Lese String bis zum ; und speichere in Accel_O ab
        Accel_O = Serial.readStringUntil(';');
        Serial.read();//Nächstes Zeichen ist ; somit können wir es auslesen ohne zu speichern
        //Lese Zweiten Teil nach dem ; bis zum '\n' und speichere
        Gyro_O = Serial.readStringUntil('\n');
        MagAccel_O[count1] = Accel_O.toFloat(); //wandle in float um und speichere in Array
        MagGyro_O[count1] = Gyro_O.toFloat();//wandle in float um und speichere in Array
      }//end for    
    }//end if 
  }//end while
  delay(200);
  StateMachine.Set(POSITION_REC); //Zustandswechsel zu POSITIONS_REC
}//end State INIT

Enddevice:

void loop() 
{
  /*Horchen, ob Kontrollzeichen von Coordinator ankommt*/
  while(Serial.available())
  {
    //Frage einkommendes Zeichen ab
    char incomingSign = (char)Serial.read();
    //Falls Kontorllzeichen = ! von Coordinator gesendet wird--> Signal 40 Datensätze senden
    if(incomingSign == '!')
    { 
      for(int i=0; i<40; i++)
      {
        /* Neues Sensorevent aufrufen, um aktuelle Werte zu erhalten*/ 
        sensors_event_t accel, mag, gyro, temp;
        lsm.getEvent(&accel, &mag, &gyro, &temp);
/*Berechne Accel-Magnitude*/
        AccelMagnitude= sqrt(pow(accel.acceleration.x,2)+pow(accel.acceleration.y,2)+pow(accel.acceleration.z,2));

        /*Berechne Gyro-Magnitude*/
        GyroMagnitude = sqrt(pow(gyro.gyro.x,2)+pow(gyro.gyro.y,2)+pow(gyro.gyro.z,2));

        /*Übertragung zum Coordinator* in folgendem Format : BAccelMagnitude;GyroMagnitude\n
        /*Erkennungs-Variable für Nodes --> Oberschenkel*/
        Serial.print('O');
        /*Senden der Daten an Corrdinator*/
        Serial.print(AccelMagnitude);
        Serial.print(';');
        Serial.print(GyroMagnitude);
        /*Terminator senden, um Coordinator Ende des Datensatzes zu signalisieren*/
        Serial.print('\n');
        delay(100);
     }//end for
   }//end if !

Wäre über jeden Tipp dankbar

Hi so habe weiterhin getest und ja komme immernoch zu folgendem Ergebnis, was der Coordinator empfängt und verstehe nicht warum er beim ersten mal die beiden Werte abspeichert und bei zweiten Durchlauf das O immer mitnimmt . Siehe bild, woran kann das liegen?

ProblemEmpfangCoordinator.png