串行读取循环不好
Posted
技术标签:
【中文标题】串行读取循环不好【英文标题】:Serial read doesnt loop well 【发布时间】:2021-10-19 06:34:13 【问题描述】:很难为我的问题确定一个合适的问题,所以听到的是我想要的: 我有一个 Arduino Pro Micro 和一个 Arduino Nano 33 BLE。 Nano 使用他的 9 轴传感器来获取位置。我只使用上/下和左/右的角度。他将 21 到 108 和 0 到 100 之间的角度映射为音高和音量。我通过 sprintf 将数字写入 char 数组,然后通过 Serial 1 将其发送到 Arduino Pro Micro。
这里我有问题。我想永久读取发送的数组。我用这个自动取款机:
void readURAT()
char buffer[7], inChar;
int i =0;
while(Serial1.available() > 0)
if(i<index)
inChar=Serial1.read();
buffer[i]=inChar;
i++;
else
buffer[6]='\0';
i=0;
Serial.println(buffer);
Serial1.flush();
这有效,但只有几次。就像,我得到了 10 次价值,然后什么也没有。字符值例如是“066070”。有人知道我错过了什么吗? 提前感谢您的帮助!
【问题讨论】:
如果 Serial1 没有可用的完整消息,您可能会不同步。 【参考方案1】:您将获得静默缓冲区溢出,因为您循环 var i
未针对 buffer
的数组大小 (7) 检查。函数中未定义index
。
如果您收到少于index
字符,您的缓冲区将没有\0
终止符。
【讨论】:
以上是关于串行读取循环不好的主要内容,如果未能解决你的问题,请参考以下文章
在 C++ 中读取文件:for 和 while 嵌套循环没有按预期工作:串行?
Pyserial readline() 永远挂起程序而不读取串行数据
java从键盘接受字符串行BufferedReader(InputStreamReader(System.in))这样用BufferedReader对象读取行