我有一个XBee-Arduino将一个简单的int计数器发送到接收器XBee-Arduino。接收器打印得很好,直到达到16级以上。这是我的输出的一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 48 17 50 19 52 21 54 23 56 25 26 59 28 61 62 63 64 65 98 67 68 69
我尝试过新的XBees,XBees似乎不是问题所在。
发射器代码:
#include "SoftwareSerial.h"
int count = 1;
// RX: Arduino pin 2, XBee pin DOUT. TX: Arduino pin 3, XBee pin DIN
SoftwareSerial XBee(2, 3);
void setup() {
XBee.begin(115200);
Serial.println ("Initializing...");
}
void loop() {
XBee.write(count);
delay(1000);
count++;
}
接收代码:
#include "SoftwareSerial.h"
// RX: Arduino pin 2, XBee pin DOUT. TX: Arduino pin 3, XBee pin DIN
SoftwareSerial XBee(2, 3);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Started Ground station");
XBee.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
if (XBee.available())
{
int c = XBee.read();
Serial.println(c);
delay(1000);
}
else
{
Serial.println("XBee not available.");
delay(1000);
}
}
我只是希望接收器按原样打印计数器。不知道为什么我在15之后得到那些随机数。任何帮助表示赞赏。
不正确的数字不同一位。
这可能是由于读取串行线路时的不同时序造成的,特别是在高波特率时(软件串行在较高的波特率下不是特别可靠)。你可以看到一个位漂移到相邻位的时序中的位置,例如
16 = 0001 0000 was interpreted as 0011 0000 = 48
18 = 0001 0010 was interpreted as 0011 0010 = 50
20 = 0001 0100 was interpreted as 0011 0100 = 52
27 = 0001 1011 was interpreted as 0011 1011 = 59
34 = 0010 0010 was interpreted as 0110 0010 = 98
尝试使用较低的波特率,以使时序不那么重要,并且这些位不太可能漂移到相邻位的时序。