串行读取循环不好

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() 永远挂起程序而不读取串行数据

通过串行读取 utf8 时,Arduino 行为异常

读取串行输入并打印到Tkinter GUI

java从键盘接受字符串行BufferedReader(InputStreamReader(System.in))这样用BufferedReader对象读取行

从串行读取数据块是不是比一次读取 1 个字符更快?