我正在尝试从 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/