尝试通过串口改进 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研究一种允许并行读取和写入的中断驱动设计。