为什么我的串行读数不准确?使用 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
尝试使用较低的波特率,以便时序不那么关键,并且位不太可能漂移到相邻位的时序中。
我有一个 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
尝试使用较低的波特率,以便时序不那么关键,并且位不太可能漂移到相邻位的时序中。