c++ - Arduino serial.available 奇怪的错误

标签 c++ serial-port arduino

我正在尝试从 Arduino 串口读取数据。我当前的代码:

if(Serial.available()>0){
if(Serial.available()==9){...}

当我在串行监视器中键入 9 个字符时,它工作正常。 所以当我在

中添加第二个 if

if(Serial.available()>0)

之后

if(Serial.available()==9){}

它将每个字符识别为一个读物。例如,当我输入 4 个字符时,它说 Serial.available()=1 4 次。

真实代码:

    if(Serial.available() > 0){
        if(Serial.available()==9){
        for(int i =0;i<9;i++){
           RGB[i]=Serial.read() - '0';
        }

        //get the data from the integer array
        R= RGB[0]*100+RGB[1]*10+RGB[2];
        G= RGB[3]*100+RGB[4]*10+RGB[5];
        B= RGB[6]*100+RGB[7]*10+RGB[8];
        for(int q=0; q<=255; q++){
           if(R>Rp){
              Rp+=1;
              analogWrite(8, Rp);
           }else if(R<Rp){
              Rp-=1;
              analogWrite(8, Rp);
           }
           if(G>Gp){
              Gp+=1;
              analogWrite(9, Gp);
           }else if(G<Gp){
              Gp-=1;
              analogWrite(9, Gp);
           }
           if(B>Bp){
              Bp+=1;
              analogWrite(10, Bp);
           }else if(B<Bp){
              Bp-=1;
              analogWrite(10, Bp);
           }
           delay(10);

       }
  }
  //  if(Serial.read()=='r'){
  //        if(readinglstate==0){
  //          analogWrite(readinglight, 5);
  //          readinglstate=1;
  //        }else if(readinglstate==1){
  //          analogWrite(readinglight, 70);
  //          readinglstate=2;
  //        }else if(readinglstate==2){
  //          analogWrite(readinglight, 255);
  //          readinglstate=3;
  //        }else if(readinglstate==3){
  //          analogWrite(readinglight, 0);
  //          readinglstate=0;
  //        }
  //      }
  }

注释代码是改变事情的代码......

最佳答案

Serial.read()=='r'

正在从接收缓冲区中弹出字节。更像是……

input = Serial.read(); // pop the next byte off, regardless of its value.
if (input == 'r') {

因此缓冲区中的所有字节都从缓冲区中读取。直到“Serial.available() == 0” 我推荐 peek 功能。

if(Serial.peek()=='r'){
  Serial.read(); // already know it, so pop it.
  if(readinglstate==0){
...

关于c++ - Arduino serial.available 奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20891146/

相关文章:

c++ - Microsoft Visual Studio C++ 2013 链接错误(使用 SQLite 包装器时)

C# .NET 串行端口连接,不读取或写入

c - Bluez编程

c++ - 分支感知编程

c++ - std::array 求最大值函数

python - pySerial write() 在 Python 解释器中运行良好,但在 Python 脚本中运行不正常

c# - DataReceived 事件有时不会触发

c++ - String.replace() 和动态内存

c - 这是 Arduino modulo 的错误还是我的错误?

c++ - 在 Win64 下将 SOCKET 转换为 int 是否安全?