Arduino时序问题与Digi Xbee V1读取循环中的函数()

时间:2014-09-15 14:56:35

标签: arduino xbee

我开始使用XBee射频模块并且对这个定时问题的发生方式和原因有一个普遍的关注......两个XBee确实进行了通信,我正在通过Arduino Uno和另一个通过Shield测试一个PC和X-CTU上的USB连接器。代码(通常)如下,使用Sparkfun的示例代码作为基础(位于https://learn.sparkfun.com/tutorials/xbee-shield-hookup-guide

// We'll use SoftwareSerial to communicate with the XBee:
#include <SoftwareSerial.h>
// XBee's DOUT (TX) is connected to pin 2 (Arduino's Software RX)
// XBee's DIN (RX) is connected to pin 3 (Arduino's Software TX)
SoftwareSerial XBee(2, 3); // RX, TX

void setup()
{
  // Set up both ports at 9600 baud. This value is most important
  // for the XBee. Make sure the baud rate matches the config
  // setting of your XBee.
  XBee.begin(9600);
  Serial.begin(9600);
}

void loop()
{
  if (XBee.available())
  { // If data comes in from XBee, send it out to serial monitor
    Xbee.write("ready");
    Serial.write(XBee.read());
  }
}

我担心的是我发送的2个ASCII字符包(2位数,10个,20个,30个等)只是为了测试。在X-CTU的控制台监视器中,我注意到以下内容。 (收到粗体,发送斜体。)

10 readyready 20 readyready 30 readyready 等......

有人可以用外行的方式向我解释这是怎么发生的吗?我无法理解代码按此顺序执行的方式。

1 个答案:

答案 0 :(得分:1)

您正在使用&#34; AT模式&#34;或&#34;透明序列&#34;您的XBee上的模式,因此角色一次到达一个。没有任何包装正在进行。

所以你从X-CTU发送一个10的数据包。您的Arduino上的XBee接收该数据包并开始将有效负载发送到Arduino。 Arduino收到1,触发代码发送ready作为响应。然后,Arduino会收到0并发送另一个ready

您需要在串行流中添加某种框架(比如在每行数据后添加回车符)或切换到API模式(如果您想查看,它会提供包含在标头和校验和中的网络负载)在你的数据块中,而不是作为流。

我还没有使用它,但是有一个xbee-arduino库,用于在Arduino微控制器上以API模式使用XBee模块。