ZigBee Arduino, неверно проанализированные данные

У меня возникли проблемы с установлением связи между двумя Arduinos Uno для работы.

Arduino1<> ZigBee> ———- < ZigBee < > Arduino2

Я сейчас пытаюсь заставить их понять друг друга. Сообщение в настоящее время идет хорошо от 1-го Arduino к его Zigbee, а затем ко второму Zigbee.

Arduino1<> ZigBee> ———-< ZigBee — X— Arduino2

Проблема: Когда я пытаюсь проанализировать на Arduino2 полезную нагрузку входящего пакета от Arduino1, сообщения отличаются.

Поскольку я использую ZigBee API2, во время путешествия между ZigBees имеется сообщение CRC, поэтому (после некоторых исследований) я уверен, что пакет верен в том месте, где он поступает на 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);
}

но результат был примерно таким же.

Итак, мой вопрос: я делаю разбор неправильно? Есть ли проблема с получить данные() функционировать?

Спасибо 🙂

РЕДАКТИРОВАТЬ:
после некоторых исследований я обнаружил, что если я делаю

   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

Итак, я думаю, что в то время как я читаю, данные меняются, и, возможно, поэтому они набирают данные. Так есть ли способ «заморозить» данные, прежде чем я их прочитаю?

0

Решение

Я наконец нашел то, что продолжалось:
Я использую NewSoftSerial (потому что одного Serial явно недостаточно), и кажется, что f ** ck up timers (long timeout) и я фактически использовал либо библиотеку TimerOne, либо библиотеку «Thread.h», чтобы разрешить мне использовать прерывание.

Ну, все это было явно испорчено тайм-аутом на NSS, так что будьте осторожны, если вы будете использовать их вместе в будущем. Мне пришлось переключиться с TimerOne на Thread.h (который, конечно, не был реальным потоком), что позволило мне избежать проблем.

Я также обнаружил, что обычный Serial, тот, что в комплекте с Arduino, неплохо играет с вещами с таймером.

Так что спасибо за попытку помочь мне, но на самом деле я не думал, в чем проблема.

Venix

0

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


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