Xbee - stop sending to when a byte is received

I have a robot with a XBee module (ROUTER) and a bunch of sensors. Another Xbee module (COORDINATOR) is connected via USB to the PC. They work in AT mode, broadcasting.

I would like to send the readings of the sensors from ROUTER to COORDINATOR in a loop, but still being able to interrupt it by sending (manually) some byte from the COORDINATOR to the ROUTER, and then again continue on receiving the sensors' readings. I get the sensors' readings sent and received, but I cannot get the ROUTER to receive the byte sent from the COORDINATOR.

I would appreciate your help.

Here is my code:

int sensorValue = 0;

void setup() {              
  Serial.begin(9600);         
  int readSensorValue();
}

void loop() {
  if ( Serial.available() ) { 
     if ( Serial.read() == 'R' ) { // "R" is the byte addressing the robot
       Serial.println("Byte received");
     }
  }

  sensorValue = readSensorValue();
  Serial.println(sensorValue );

}

int readSensorValue(){
   // this function returns the sensor reading
}

Did I ask something too trivial, too difficult or just inappropriate? :-?

For a test, why not comment out the following two lines?

  sensorValue = readSensorValue();
  Serial.println(sensorValue );

With the modification, do you get the "Byte received" message?

When I comment those lines, I get the "Byte received" message. I believe I need to create an interrupt to read a received byte, but I am not sure how to do that. I would appreciate any help.

When I comment those lines, I get the "Byte received" message.

Ok. There is no problem with basic wireless communication configurations.
Next, try to insert the following red line.

void loop() {
if ( Serial.available() ) {
if ( Serial.read() == 'R' ) { // "R" is the byte addressing the robot
Serial.println("Byte received");
}
}

sensorValue = readSensorValue();
Serial.println(sensorValue );
delay(500);

}

Do you get sensor data and "Byte received" response?
I suspect sending the data without any delay in the loop to be the main source of the problem.

I tried with delay(100); already, didn't work. But I will try longer delay as well. I can't do it before Monday as I am away, but I will get back to you on this.
Thank you for your help, I really appreciate it.

If longer delay() doesn't solve the problem,
how about trying to control the sending interval using a timer like the following?

int sensorValue = 0;
long previousMillis = 0;
long interval = 500;

void setup() {
Serial.begin(9600);
int readSensorValue();
}

void loop() {
if ( Serial.available() ) {
if ( Serial.read() == 'R' ) { // "R" is the byte addressing the robot
Serial.println("Byte received");
}
}
if (millis() - previousMillis > interval) {
previousMillis = millis();
sensorValue = readSensorValue();
Serial.println(sensorValue );
}
}

int readSensorValue(){
// this function returns the sensor reading
}

I am sorry for the late reply. I resolved the issue by creating an external interrupt. I guess serial port could not handle the amount of data it was receiving.

thanks for your help.