У меня возникли проблемы с налаживанием связи между двумя Arduino Uno.
Arduino1‹>ZigBee >---------- ‹ ZigBee ‹ > Arduino2
Сейчас я пытаюсь заставить их понять друг друга. В настоящее время сообщение хорошо передается между 1-м Arduino и его Zigbee, а затем и вторым Zigbee.
Arduino1‹>ZigBee>----------‹ ZigBee--X-- Arduino2
Проблема в том, что когда я пытаюсь разобрать на Arduino2 полезную нагрузку входящего пакета от Arduino1, сообщения отличаются.
Поскольку я использую ZigBee API2, в сообщении есть CRC при перемещении между ZigBee, поэтому (после некоторых расследований) я уверен, что пакет правильный, когда он прибыл на ZigBee2 (если нет, пакет отбрасывается).
Итак, главное событие сейчас:
memmove(received,xbee_Rx.getData(),24);
Когда я получаю пакет
xbee.readPacket();
if (xbee.getResponse().isAvailable())
{
if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE)
{
xbee.getResponse().getZBRxResponse(xbee_Rx);
memmove(received,xbee_Rx.getData(),24);
for (int i = 0; i < 24; i++) {
Serial.print(received[i],HEX);
}
}
}
Пока я отправляю это «4144000000000000446B3AB4083E8484258» в HEX на Arduino1
Я получил это «414400000000000008C201862419B5» в HEX на Arduino2
Это пример, данные всегда неверны (кроме, может быть, двух первых байтов). Результат какой-то случайный и непригодный для меня.
Я также пытался разобрать с
for (int i = 0; i < 24; i++) {
received[i] = xbee_Rx.getData()[i];
Serial.print(received[i],HEX);
}
но результат был примерно таким же.
Итак, мой вопрос: я делаю синтаксический анализ неправильно? Есть ли проблема с функцией getData()?
Спасибо :-)
РЕДАКТИРОВАТЬ: после некоторых исследований я обнаружил, что если я это сделаю
for (int i = 0; i < sizeof(xbee_Rx.getData()); i++) {
Serial.print(xbee_Rx.getData()[i],HEX);
}
Serial.println();
for (int i = 0; i < sizeof(received); i++) {
Serial.print(received[i],HEX);
}
данные не совпадают.
414400000000000008C201885358C80
414400000000000008C201862419E6
вместо 4144000000000000441A6E9B407DDD494258
Итак, я думаю, пока я читаю, данные меняются, и, возможно, поэтому они испортились. Итак, есть ли способ «заморозить» данные, прежде чем я их прочитаю?
XBeeResponse response = xbee.getResponse();
, а затем использовать response в коде синтаксического анализа. - person Hans Passant   schedule 02.04.2015xbee.getResponse()
, судя по документации. - person tomlogic   schedule 02.04.2015