尝试通过串口改进 Arduino 与 Arduino 的通信
Trying to improve Arduino to Arduino communication via Serial
我当前的项目需要一个 Arduino Uno 通过串口与一个 Arduino Mega 通信,我想提高数据传输速率。
这个 Arduino Uno 正在使用 analogRead()
(我已经测试过)通过桥接电路从应变仪中提取信息。然后它通过串行将此信息发送到 Mega,然后 Mega 使用 USB 电缆和串行通信将其发送到计算机。
需要这个Mega板是因为Uno是放在一个旋转轴上的,它和Mega之间的通信是通过圆形光耦完成的,我已经测试过,也可以。
除此之外,我目前正在以 190Hz 的频率从旋转的 Uno 读取数据。我相信大部分问题是由于代码中存在 delay(5);
,但即使将其降低到 3ms 也足以让数据到达时丢失字符。
Uno代码:
void setup() {
Serial.begin(19200);
}
void loop() {
Serial.println(analogRead(A0));
delay(5);
}
Mega 代码:
char t;
void setup() {
Serial.begin(9600);
Serial1.begin(19200);
}
void loop() {
if (Serial1.available()>0)
{
t = Serial1.read();
Serial.print(t);
}
}
发送的数据始终是 0 到 1023 之间的整数,因为它来自 analogRead()
,所以也许我可以对其进行更好的编码,但我不确定该怎么做或者是否会这样做修复必要 delay(5);
的更大问题
非常感谢
考虑您在 Mega 上配置的数据传输速率:19200 bps 输入和 9600 bps 输出。还要考虑 Serial.print()
是一个阻塞调用,因此您的程序必须等待整个传输完成,然后才能循环进行另一次读取。这将有效地将您的传输速率限制为 9600 bps(并且由于 Serial1.read()
的开销而实际上更低)。作为第一步,看看您是否可以增加此速率以至少匹配输入速率 (19200 bps)。
如果您确信它有效并且光耦合器连接没有丢失脉冲,您可以尝试进一步提高串行速率and/or研究一种允许并行读取和写入的中断驱动设计。
我当前的项目需要一个 Arduino Uno 通过串口与一个 Arduino Mega 通信,我想提高数据传输速率。
这个 Arduino Uno 正在使用 analogRead()
(我已经测试过)通过桥接电路从应变仪中提取信息。然后它通过串行将此信息发送到 Mega,然后 Mega 使用 USB 电缆和串行通信将其发送到计算机。
需要这个Mega板是因为Uno是放在一个旋转轴上的,它和Mega之间的通信是通过圆形光耦完成的,我已经测试过,也可以。
除此之外,我目前正在以 190Hz 的频率从旋转的 Uno 读取数据。我相信大部分问题是由于代码中存在 delay(5);
,但即使将其降低到 3ms 也足以让数据到达时丢失字符。
Uno代码:
void setup() {
Serial.begin(19200);
}
void loop() {
Serial.println(analogRead(A0));
delay(5);
}
Mega 代码:
char t;
void setup() {
Serial.begin(9600);
Serial1.begin(19200);
}
void loop() {
if (Serial1.available()>0)
{
t = Serial1.read();
Serial.print(t);
}
}
发送的数据始终是 0 到 1023 之间的整数,因为它来自 analogRead()
,所以也许我可以对其进行更好的编码,但我不确定该怎么做或者是否会这样做修复必要 delay(5);
非常感谢
考虑您在 Mega 上配置的数据传输速率:19200 bps 输入和 9600 bps 输出。还要考虑 Serial.print()
是一个阻塞调用,因此您的程序必须等待整个传输完成,然后才能循环进行另一次读取。这将有效地将您的传输速率限制为 9600 bps(并且由于 Serial1.read()
的开销而实际上更低)。作为第一步,看看您是否可以增加此速率以至少匹配输入速率 (19200 bps)。
如果您确信它有效并且光耦合器连接没有丢失脉冲,您可以尝试进一步提高串行速率and/or研究一种允许并行读取和写入的中断驱动设计。