串行读取循环不好

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 终止符。

【讨论】:

以上是关于串行读取循环不好的主要内容,如果未能解决你的问题,请参考以下文章