0

我的 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,我可能会收到几百个字节 - 但不能保证

除了从我自己的代码中查看这个之外,我还使用 x-ctu 的终端进行调试并看到同样的问题。(这也是我知道我的其余代码没有被触及的方式,因为没有发送任何内容 - 有趣的是,当手动发送数据时它被正确处理,除了它没有被发回,因为它应该用于调试目的)有没有人有什么想法吗?

我还尝试在写入后添加延迟,如您所见,F()宏已经分散Serial.flush();在我能想到的任何地方,而根本问题没有改变。


谢谢,有几个问题/意见

  1. 是的,我希望它在一个while循环中,传感器测量的速率>>而不是其他任何东西的速率。
  2. Serial.flush() 不确保我不会溢出吗?
  3. 如果不是,那么我想我将不得不玩各种延迟时间?有没有更好的办法?
  4. 为什么我的 arduino/xbee 上的插头不能“解决”这个问题?即允许我再获得几k?

无论如何,我会尝试减少测量次数,看看今晚晚些时候会发生什么

4

1 回答 1

2

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

这条线while(!Serial.available()){//也很奇怪。您知道它将在一个紧密的循环中执行,直到有传入数据,对吗?

您的项目范围尚不清楚,因此我无法提出任何建议 - 除了替换ifwhile查看是否可以解决当前问题。

于 2014-06-24T04:14:27.460 回答