我开始使用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 等......
有人可以用外行的方式向我解释这是怎么发生的吗?我无法理解代码按此顺序执行的方式。
答案 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模块。