为什么我的串行读数不准确?使用 2 个 xbees

Why are my serial readings not accurate? Using 2 xbees

我有一个 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

尝试使用较低的波特率,以便时序不那么关键,并且位不太可能漂移到相邻位的时序中。