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?

+0

您如何发送数据? – eventHandler 2015-04-01 16:36:34

+0

用xbee.send(TXRequest);在Arduino1上(它使用相同的库,即Xbee-Arduino);当我使用XCTU记录数据包时,数据是正确的,所以问题显然是Arduino2上的解析问题。 – Venix 2015-04-02 08:37:51

+1

您做错了,必须只有*一次* getResponse()调用。你现在有多个电话,所以,是的,数据将会改变。您需要编写'XBeeResponse response = xbee.getResponse();',然后在解析代码中使用* response *。 – 2015-04-02 14:44:42

我终于找到了发生了什么: 我使用NewSoftSerial(因为一个串行显然是不够的),它似乎f ** ck定时器(长超时),我实际上使用TimerOne库或“Thread.h”库允许我使用中断。

那么,整个事情显然已经被NSS的超时搞砸了,所以要小心如果你将来一起使用它们。我不得不从TimerOne切换到Thread.h(当然不是真正的线程),这让我可以避免出现问题。

我还发现,与Arduino捆绑在一起的普通串口与计时器一起玩坏的东西。

所以,谢谢你试图帮助我,但它并不是真的在我认为的问题所在。

Venix