Serial.print在arduino上速度减慢/失败
我的arduino循环中有以下代码Serial.print在arduino上速度减慢/失败,arduino,arduino-uno,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(); } 它从距离传感器读取数据,并将值
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防护罩。问题是:
F()
宏和Serial.flush()代码>我能想到的任何地方,基本问题没有变化
谢谢,有几个问题/意见
是的,我希望它在一个while循环中,传感器测量的速率>>高于其他任何速率
Serial.flush()是否确保不会溢出李>
如果不行的话,我想我将不得不玩不同长度的延迟?有更好的办法吗
为什么不直接拔掉arduino/xbee上的插头“修复”这个问题?也就是说,允许我再多拿几k
无论如何,我将尝试减少测量的数量,看看今晚晚些时候会发生什么您可能发送数据太快(每秒数百次),并导致串行缓冲区和/或xbee溢出
另外,这一行而(!Serial.available()){/
非常奇怪。您知道它将在一个紧密的循环中执行,直到有传入的数据,对吗
你的项目范围不清楚,所以我不能提出任何建议-除了用if
替换while
看看这是否解决了眼前的问题。我在主要问题中添加了几个问题/评论,因为评论太长,添加了一个延迟(100);最后似乎解决了问题(在我不得不去上班之前,我的x-ctu收到了约60k字节的数据)。稍后我会运行一个更长的测试,并确保100%确定。同时,是时候确保我阅读/理解flush命令的工作原理了。@Brad-循环
功能可以每秒运行数百次,比发送数据快得多(与while
相同)。延迟功能可能会有所帮助,但最好通过检查时间来明确控制频率-请参阅Arduino示例“不延迟闪烁”。是的,谢谢,我意识到了。我没有意识到的是,刷新没有自动解决该问题(在读了更多关于它的内容后,我想我知道了)我仍然很困惑,为什么电源循环似乎没有完全重置-显然,它会在数千字节之后失败,但它甚至没有发送几百字节。我想知道数据是否以某种方式在arduino中某处/如何持久化,但这似乎有点疯狂。感谢链接!我可能会实现一些similar,我通过波特率限制检查。从实际的角度来看,为什么要在串行接口上输出格式化数据?串行通信是一个相对昂贵的操作,因此如果速度是一个优先级,您应该最小化该通道上的通信量。我只需发送原始字节并在另一端解释它们。您的意思是什么n通过格式化数据?F()关键字将内容移动到比arduino上的SRAM大的闪存中。这可能不是必需的,我将尝试删除。Serial.print()
传输距离的Ascii表示。analogRead
读取的值介于0和255之间,使它们的长度为一个字符,但是如果执行串行打印(255)
,您可以传输三个字符:“2”、“5”、“5”,而不是一个ascii值为255的字符,后者更紧凑。模拟读取介于0-1023之间。在我得到它们时发送它们要简单得多,并且我可以在该限制内生存。