gpt4 book ai didi

c++ - ZigBee Arduino,解析数据不正确

转载 作者:行者123 更新时间:2023-11-30 17:17:35 25 4
gpt4 key购买 nike

我在 2 个 arduino Uno 之间进行通信时遇到了一些麻烦。

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

我目前正在努力让他们互相理解。目前,第一个 Arduino 到他的 Zigbee,再到第二个 Zigbee 之间的消息传输顺利。

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

问题是:当我尝试在 Arduino2 上解析来自 Arduino1 的传入数据包的有效负载时,消息是不同的。

由于我使用的是 ZigBee API2,因此在 ZigBee 之间传输时消息上有一个 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 上以十六进制发送此“4144000000000000446B3AB4083E8484258 ”

我在 Arduino2 上收到了十六进制格式的“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

所以,我想当我读取数据时,数据正在发生变化,这可能就是它搞砸数据的原因。那么,有什么方法可以在读取数据之前“卡住”它们吗?

最佳答案

我终于发现发生了什么事:我正在使用 NewSoftSerial (因为一个 Serial 显然是不够的),它似乎搞砸了计时器(长时间超时),我实际上是使用 TimerOne 库或“Thread.h”库来允许我使用中断。

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

我还发现普通的串口,即与 Arduino 捆绑在一起的串口,在定时器方面也发挥了不好的作用。

非常感谢您尝试帮助我,但这并不是我认为的问题所在。

威尼斯

关于c++ - ZigBee Arduino,解析数据不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29395159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com