ZigBee Arduino,解析数据不正确

时间:2015-04-01 15:43:12

标签: c++ c parsing arduino zigbee

我在两个arduinos Uno之间进行沟通时遇到了一些麻烦。

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);
        }
    }
}

我在Arduino1的HEX中发送“4144000000000000446B3AB4083E8484258”

我在Arduino2的HEX中收到了这个“414400000000000008C201862419B5”

这是一个例子,数据总是错误的(除了两个第一个字节之外)。结果有点随机,对我来说无法使用。

我也尝试用

进行解析
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

所以,我猜我正在读数据正在发生变化,这也许就是为什么它可以用来获取数据。那么,在我阅读之前有没有办法“冻结”数据?

1 个答案:

答案 0 :(得分:0)

我终于找到了发生的事情: 我使用的是NewSoftSerial(因为一个Serial显然还不够),它似乎是定时器(长时间超时)而我实际上使用的是TimerOne库或者#34; Thread.h&#34;库有点允许我使用中断。

好吧,整个事情显然被NSS的超时搞砸了,所以要注意你将来是否一起使用它们。我不得不从TimerOne切换到Thread.h(当然不是真正的线程),这样我就可以避免出现问题。

我还发现正常的Serial,与Arduino捆绑在一起,正在播放不好的东西以及定时器的东西。

非常感谢你试图帮助我,但这并不是我认为问题所在的地方。

Venix