我目前的项目需要一个Arduino Uno通过串行通信与一个Arduino Mega和我想提高数据传输率。
这个Arduino Uno正在通过使用analogRead() (我已经测试过的)桥电路从应变计中提取信息。然后,它将这些信息通过串行发送到Mega,再由Mega使用USB电缆和串行通信将其发送到计算机。
这个巨型板是需要的,因为Uno放在一个旋转轴上,它和Mega之间的通信是通过一个圆形光耦完成的,我已经测试过了,而且也在工作。
这样的话,我现在正在以190 at的频率读取旋转的Uno的数据。我相信大部分问题都是由于代码中存在的delay(5);造成的,但即使将其降低到3ms,也足以使数据到达时缺少字符。
联合国内罗毕办事处代码:
void setup() {
Serial.begin(19200);
}
void loop() {
Serial.println(analogRead(A0));
delay(5);
}梅加密码:
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);的更大问题
非常感谢
发布于 2017-09-20 02:58:50
考虑一下您在Mega上配置的数据传输速率: 19200 bps输入和9600 bps输出。另外,请考虑Serial.print()是一个阻塞调用,所以您的程序必须等待整个传输完成,然后再循环进行另一次读取。这将有效地将您的传输速率限制在9600 bps (实际上由于Serial1.read()的开销而降低)。作为第一步,看看是否可以将此速率提高到至少与输入速率(19200 bps)相匹配。
如果您确信这是可行的,并且光耦合器连接不缺少脉冲,您可以尝试进一步提高您的串行速率和/或研究允许并行读写的中断驱动设计。
https://stackoverflow.com/questions/46312354
复制相似问题