首页 > 解决方案 > Arduino 串行输入值处理

问题描述

如果在Arduino 串口输入中输入M ,在对应的 if 语句中需要等待接收新的值,但是 if 语句里面的内容会被执行而不需要等待。

void Mouse_control(int i){
  Serial.print(i);
  if( i ==1){
    delay(5000);
    Mouse.press(MOUSE_LEFT);
    delay(100);
    Mouse.release(MOUSE_LEFT);
    delay(200);  
  }
}
void loop() {
 // check for incoming serial data:
   while (Serial.available() == 0) {}
    char inChar = Serial.read();
  // read incoming serial data:
  if(inChar == 'M'){
    while (Serial.available() == 0) {}
    Mouse_control(Serial.parseInt());
  }
}

标签: arduino

解决方案


正如您所注意到的,问题是'\n'. 要获得更可靠的代码,请isspace在标准库中使用以忽略所有传入的不可打印字符:

char c;
do
{
    c = Serial.read();
} while (isspace(c));

然后将输入字符解析为int.


推荐阅读