ZigBee Arduino,错误的解析数据
我有一些麻烦,使2个arduinos Uno之间的沟通工作。ZigBee Arduino,错误的解析数据
Arduino1 <>的ZigBee> ---------- <的ZigBee <> Arduino2
目前,我试图让他们了解彼此。该消息目前在第一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);
}
}
}
虽然我在HEX发送此 “4144000000000000446B3AB4083E8484258” 上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
所以,我想,而我读的数据在不断变化,这也许为什么他妈的了DATAS。那么,在阅读它们之前有没有办法“冻结”Datas?
我终于找到了发生了什么: 我使用NewSoftSerial(因为一个串行显然是不够的),它似乎f ** ck定时器(长超时),我实际上使用TimerOne库或“Thread.h”库允许我使用中断。
那么,整个事情显然已经被NSS的超时搞砸了,所以要小心如果你将来一起使用它们。我不得不从TimerOne切换到Thread.h(当然不是真正的线程),这让我可以避免出现问题。
我还发现,与Arduino捆绑在一起的普通串口与计时器一起玩坏的东西。
所以,谢谢你试图帮助我,但它并不是真的在我认为的问题所在。
Venix
您如何发送数据? – eventHandler 2015-04-01 16:36:34
用xbee.send(TXRequest);在Arduino1上(它使用相同的库,即Xbee-Arduino);当我使用XCTU记录数据包时,数据是正确的,所以问题显然是Arduino2上的解析问题。 – Venix 2015-04-02 08:37:51
您做错了,必须只有*一次* getResponse()调用。你现在有多个电话,所以,是的,数据将会改变。您需要编写'XBeeResponse response = xbee.getResponse();',然后在解析代码中使用* response *。 – 2015-04-02 14:44:42