Go Down

Topic: Bi-directional communication using xbee series1 and Arduino Uno (Read 352 times) previous topic - next topic

Lucy393

I am using xbee pro series 1 in Api mode for communication. One Co-ordinator and two end devices. I am able to send data from to Co-ordinator to end device but when I am trying to send and receive simultaneously from end device there is an error. How should I do this?(I  used Andrew rapp xbee library).
 CO- ORDINATOR CODE:
Code: [Select]

#include <Xbee.h>
XBee xbee = XBee();
uint8_t payload[] = { 12, 15 };
XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x40AACFA1);
Tx64Request tx = Tx64Request(addr64, payload, sizeof(payload));
XBeeResponse response = XBeeResponse();Rx16Response rx16 = Rx16Response();
Rx64Response rx64 = Rx64Response();

void setup() {
  Serial.begin(9600);
 
  xbee.setSerial(Serial);
}
void loop() {
  xbee.send(tx);
  delay(1000);
    xbee.readPacket();
   
    if (xbee.getResponse().isAvailable()) {
     
      // got something
      Serial.println("hurraah");
     
      if (xbee.getResponse().getApiId() == RX_16_RESPONSE || xbee.getResponse().getApiId() == RX_64_RESPONSE) {
       Serial.println("got a rx packet");
       if (xbee.getResponse().getApiId() == RX_16_RESPONSE) {
                xbee.getResponse().getRx16Response(rx16);
             uint8_t data[15];
                 for (int i = 0; i < rx16.getDataLength(); i++) {
          data[i] += rx16.getData(i);
        }
        Serial.println(data[0]);
        Serial.println(data[1]);
         data[0] = 0;
         data[1] =  0;
                                         
        } else {
                xbee.getResponse().getRx64Response(rx64);
               

                 Serial.println("it's 64! ");
             
        }
                     
            } else {
       
        Serial.println("didnot receive packet");   
      }
    } else if (xbee.getResponse().isError()) {
     
       Serial.println("error");   
    }
  delay(1000);
 }

 


END DEVICE CODE:
Code: [Select]

#include <Xbee.h>
XBee xbee = XBee();
uint8_t payload[] = {27, 49};
XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x40AACFB4);
Tx64Request tx = Tx64Request(addr64, payload, sizeof(payload));
XBeeResponse response = XBeeResponse();
Rx16Response rx16 = Rx16Response();
Rx64Response rx64 = Rx64Response();


uint8_t data[15];
void setup() {
   Serial.begin(9600);
    xbee.setSerial(Serial);
 
}

 continuously reads packets, looking for RX16 or RX64
void loop() {
 xbee.send(tx); 
 delay(1000);
    xbee.readPacket();
   
    if (xbee.getResponse().isAvailable()) {
      // got something
      Serial.println("hurraah");
     
      if (xbee.getResponse().getApiId() == RX_16_RESPONSE || xbee.getResponse().getApiId() == RX_64_RESPONSE) {
       Serial.println("got a rx packet");
       if (xbee.getResponse().getApiId() == RX_16_RESPONSE) {
                xbee.getResponse().getRx16Response(rx16);
             
                 for (int i = 0; i < rx16.getDataLength(); i++) {
          data[i] += rx16.getData(i);
        }
        Serial.println(data[0]);
        Serial.println(data[1]);
         data[0] = 0;
         data[1] =  0;
                                         
        } else {
                xbee.getResponse().getRx64Response(rx64);
               

                 Serial.println("it's 64! ");
             
        }
                     
            } else {
       
        Serial.println("something unexpecting");   
      }
    } else if (xbee.getResponse().isError()) {
     
       Serial.println("error");   
    }
    delay(1000);
}


Thank you,
Lucy.

Go Up