Arduino XBee для отправки данных API

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

/* 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]));
}
}
}
}
}

РЕДАКТИРОВАТЬ (Дополнительная информация):

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

ENDEVICE

Конфигурация endevice

Введите описание изображения здесь

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

Конфигурация координатора

Введите описание изображения здесь

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

Введите описание изображения здесь

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

2

Решение

Есть некоторые проблемы: /

Во-первых, координатор ADD по умолчанию равен 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, чтобы быть уверенным в том, что вы отправляете.

РЕДАКТИРОВАТЬ:

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

0

Другие решения


По вопросам рекламы [email protected]