为什么我的序列读数不准确?使用2 xbees

问题描述 投票:0回答:1

我有一个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之后得到那些随机数。任何帮助表示赞赏。

arduino arduino-uno xbee
1个回答
2
投票

不正确的数字不同一位。

这可能是由于读取串行线路时的不同时序造成的,特别是在高波特率时(软件串行在较高的波特率下不是特别可靠)。你可以看到一个位漂移到相邻位的时序中的位置,例如

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

尝试使用较低的波特率,以使时序不那么重要,并且这些位不太可能漂移到相邻位的时序。

© www.soinside.com 2019 - 2024. All rights reserved.