ZigBee Arduino,解析数据不正确

ZigBee Arduino, Incorrect parsed datas

我在 2 个 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 上以十六进制发送这个“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

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

我终于找到了发生了什么: 我正在使用 NewSoftSerial(因为一个 Serial 显然是不够的)而且它似乎 f**ck 计时器(长时间超时)而且我实际上是在使用 TimerOne 库或 "Thread.h" 库来让我使用中断。

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

我还发现普通的 Serial,与 Arduino 捆绑在一起的那个,在玩定时器的时候也玩得很糟糕。

非常感谢你试图帮助我,但问题并不是我想的那样。

威尼斯