2014-12-31 2 views
2

Я хочу отправить данные с конечного устройства координатору с XBee и Arduino. Но, Arduino перезагружается при отправке данных (отправка данных была прервана). В чем проблема?Arduino XBee, отправляющий данные API

/* Transmit */ 

#include <SoftwareSerial.h> 
#include <XBee.h> 

int end = 1; 
int alim_XbeeRS = A7; 
int RX_XBee = 14; 
int TX_XBee = 15; 
XBee xbee = XBee(); 

//Allume le périphérique 
void powerOn(SoftwareSerial portcom) 
{ 
    portcom.begin(57600); 
    digitalWrite(alim_XbeeRS, HIGH); 
} 


void setup() 
{ 
    SoftwareSerial XbeeRS(RX_XBee,TX_XBee); 
    Serial.begin(57600); 
    XbeeRS.begin(57600); 
    pinMode(RX_XBee, INPUT); // Rx 
    pinMode(TX_XBee, OUTPUT); // Tx 
    pinMode(alim_XbeeRS, OUTPUT); 
    powerOn(XbeeRS); 
    xbee.setSerial(XbeeRS); 
    delay(5000); 
    Serial.println("XBee OP"); 
} 


void loop() 
{ 
    if (end == 1) 
    { 
     Serial.println("sending"); 
     ZBTxRequest _zbTx; 
     uint8_t payload[] = {'Y','E','S','\0'}; 
     XBeeAddress64 address = XBeeAddress64 (0x13A200,0x4081B77C); 
     _zbTx = ZBTxRequest(address, payload, sizeof(payload)); 
     Serial.println("sending"); 
     xbee.send(_zbTx); // The program blocks here 
    } 
    else 
    { 
     Serial.println("waiting"); 
     xbee.readPacket(100); 
     if (xbee.getResponse().isAvailable()) 
     { 
      Serial.println("waiting 1"); 
      if(xbee.getResponse().getApiId() == ZB_RX_RESPONSE) 
      { 
       Serial.println("waiting 2"); 
       ZBRxResponse _rx; 
       xbee.getResponse().getZBRxResponse(_rx); 
       uint8_t* response= new uint8_t[50]; 
       for(int i=0; i<_rx.getDataLength(); i++) 
       { 
        response[i] = _rx.getData()[i]; 
        Serial.println(char(response[i])); 
       } 
      } 
     } 
    } 
} 

EDIT (дополнительная информация):

Это ничего не изменится, если изменить тип значения в полезной нагрузке. Что касается скорости передачи данных, то оба XBees настроены на 57600 бод. Вот конфигурация XBee в:

ENDEVICE

endevice config

Enter image description here

КООРДИНАТОРОВ

Coordinator configuration

Enter image description here

Результат от последовательного порта этого устройства:

Enter image description here

Наконец, я использую Arduino ATmega 1284P. Я действительно не знаю, какая проблема может это сделать.

ответ

0

Существует некоторая проблема:/

Во-первых, координатор по умолчанию добавить это 0x0 0x0, поэтому линия, где

XBeeAddress64 address = XBeeAddress64 (0x13A200,0x4081B77C); 

должен быть

XBeeAddress64 address = XBeeAddress64 (0x0,0x0); 

Тогда это Xbee в 57600 бод тоже?

Чтобы получить ACK, вы можете использовать:

if (xbee.readPacket(1000)) 
    {  
    if (xbee.getResponse().getApiId() == ZB_TX_STATUS_RESPONSE) 
    { 
     xbee.getResponse().getZBTxStatusResponse(txStatus); 
     if (txStatus.getDeliveryStatus() == SUCCESS) 
     { 
     //It's sent 
     } 
    } 

Это может быть от вас полезной нагрузки тоже. Вам лучше использовать шестнадцатеричное значение или int, чтобы быть уверенным в том, что вы отправляете.

EDIT:

Я вижу, что вы не используете последнюю версию Xctu. Попробуйте и проверьте прямую связь между ними, чтобы узнать, можете ли вы иметь прямой контакт между координатором и устройством Routeur/End.

+0

Привет, Можно ли получить пакет ACK с широковещательным (0x0,0x0) пакетом? Благодаря! У меня есть аналогичная проблема с ACK (для обеспечения отправки). – xavi

+0

. Вы получаете выигрыш при передаче, даже если никто не набирает ваше сообщение. Но если вы ощущаете это координатор 0x0000, вы получаете это только в том случае, если он получит его. Не доверяйте вещанию 0xffff с чувством координатору 0x0000 – Thanatheos

+0

Очень спасибо за ответ, теперь я понимаю. привет – xavi

 Смежные вопросы

  • Нет связанных вопросов^_^