首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过串行方式将Arduino改进为Arduino通信

通过串行方式将Arduino改进为Arduino通信
EN

Stack Overflow用户
提问于 2017-09-20 02:35:46
回答 1查看 191关注 0票数 0

我目前的项目需要一个Arduino Uno通过串行通信与一个Arduino Mega和我想提高数据传输率。

这个Arduino Uno正在通过使用analogRead() (我已经测试过的)桥电路从应变计中提取信息。然后,它将这些信息通过串行发送到Mega,再由Mega使用USB电缆和串行通信将其发送到计算机。

这个巨型板是需要的,因为Uno放在一个旋转轴上,它和Mega之间的通信是通过一个圆形光耦完成的,我已经测试过了,而且也在工作。

这样的话,我现在正在以190 at的频率读取旋转的Uno的数据。我相信大部分问题都是由于代码中存在的delay(5);造成的,但即使将其降低到3ms,也足以使数据到达时缺少字符。

联合国内罗毕办事处代码:

代码语言:javascript
复制
void setup() {
  Serial.begin(19200);
}

void loop() {
  Serial.println(analogRead(A0));
  delay(5);
}

梅加密码:

代码语言:javascript
复制
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);的更大问题

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-20 02:58:50

考虑一下您在Mega上配置的数据传输速率: 19200 bps输入和9600 bps输出。另外,请考虑Serial.print()是一个阻塞调用,所以您的程序必须等待整个传输完成,然后再循环进行另一次读取。这将有效地将您的传输速率限制在9600 bps (实际上由于Serial1.read()的开销而降低)。作为第一步,看看是否可以将此速率提高到至少与输入速率(19200 bps)相匹配。

如果您确信这是可行的,并且光耦合器连接不缺少脉冲,您可以尝试进一步提高您的串行速率和/或研究允许并行读写的中断驱动设计。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46312354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档