Serial.print在arduino上减慢/失败

时间:2014-06-24 03:15:23

标签: arduino arduino-uno

我的arduino循环中有以下代码

while( !Serial.available()){//wait for data to start but keep sending the distance
    distance = analogRead(A0);
    Serial.print(F("d"));
    Serial.print(distance);
    Serial.print(F("|"));
    Serial.flush();
}

它从距离传感器读取并将值发送到我附加到我的arduino的x-bee盾牌。这是问题所在:

  1. 加载新草图后,我收到第一分钟左右的数据 - 从10-15k字节
  2. 然后停止发送任何内容
  3. 如果我关闭arduino,我可能会收到几百个字节 - 但不能保证
  4. 除了从我自己的代码看这个,我还使用x-ctu的终端来调试和看到同样的问题。 (这也是我如何知道我的其余代码没有被触及因为没有发送 - 有趣的是当手动发送数据时它被正确处理,除了它不会被发回,因为它应该用于调试目的)有没有人有任何想法吗?

    我也尝试在写入后添加延迟,正如您所看到的那样,F()宏和Serial.flush();分散在我能想到的任何地方,而基础问题没有任何变化。


    谢谢,一些问题/评论

    1. 是的我想要它在一个while循环中,传感器测量的速率>>而不是其他任何比率。
    2. 不是Serial.flush()确保我没有溢出?
    3. 如果没有那么我想我将不得不玩各种延迟?还有更好的方法吗?
    4. 为什么不在物理上拔掉我的arduino / xbee上的插件“修复”这个问题?即请允许我多点几点?
    5. 在任何情况下,我都会尝试减少测量次数,看看今晚晚些时候会发生什么

1 个答案:

答案 0 :(得分:2)

您可能过快地发送数据(每秒数百次)并且溢出串行缓冲区和/或xbee。

这一行while(!Serial.available()){//也很奇怪。你知道它会在一个紧凑的循环中执行,直到有传入的数据,对吧?

您的项目范围不明确,因此我无法提出任何建议 - 除了将if替换为while并查看是否可以解决当前问题。