不知道这 bugs 怎么产生的?

写法一

// 一个 available() 三个 if 
if (Serial.available()) {
     // 判断是否以 x 开头,并读取后续的整型数据
     if (Serial.read() == 'x') {  // 字符是单引号,字符串是双引号
       x = Serial.parseInt();
       // 输出找到的值
       Serial.print("x: ");
       Serial.println(x);
     }
 ​
     // 判断是否以 y 开头,并读取后续的整型数据
     if (Serial.read() == 'y') {
       y = Serial.parseInt();
       // 输出找到的值
       Serial.print("y: ");
       Serial.println(y);
     }
 ​
     // 判断是否以 z 开头,并读取后续的整型数据
     if (Serial.read() == 'z') {
       z = Serial.parseInt();
       // 输出找到的值
       Serial.print("z: ");
       Serial.println(z);
     }
   }
 ​
 输入
 >>>
 x12y13.13z15
 输出
 >>>
 10:46:50.443 -> x: 11
 10:46:50.443 -> y: 13

写法二

// 把每个 read() 的值都打印出来 --- 正常输出,没有问题 
if (Serial.available()) {
     // 判断是否以 x 开头,并读取后续的整型数据
     read_1 = Serial.read();
     Serial.print("read_1: ");
     Serial.println(read_1);
     if (read_1 == 'x') {  // 字符是单引号,字符串是双引号
       x = Serial.parseInt();
       // 输出找到的值
       Serial.print("x: ");
       Serial.println(x);
     }
 ​
     // 判断是否以 y 开头,并读取后续的整型数据
     read_2 = Serial.read();
     Serial.print("read_2: ");
     Serial.println(read_2);
     if (read_2 == 'y') {
       y = Serial.parseInt();
       // 输出找到的值
       Serial.print("y: ");
       Serial.println(y);
     }
 ​
     // 判断是否以 z 开头,并读取后续的整型数据
     read_3 = Serial.read();
     Serial.print("read_3: ");
     Serial.println(read_3);
     if (read_3 == 'z') {
       z = Serial.parseInt();
       // 输出找到的值
       Serial.print("z: ");
       Serial.println(z);
     }
   }
 ​
 ​
 输入
 >>>
 x12y13.13z15
 输出
 >>>
 10:55:49.762 -> read_1: x
 10:55:49.762 -> x: 12
 10:55:49.762 -> read_2: y
 10:55:49.762 -> y: 13
 10:55:49.762 -> read_3: .
 10:55:49.762 -> read_1: 1
 10:55:49.762 -> read_2: 3
 10:55:49.762 -> read_3: z
 10:55:49.762 -> z: 15
 10:55:49.762 -> read_1: 
 10:55:49.762 -> 
 10:55:49.762 -> read_2: �
 10:55:49.762 -> read_3: �
 ​
第一种写法都没有将整个串口通讯的字符读完,不知道为啥,第二个应该是正常的,但在 Arduino IDE 中输入的默认会有回车符号吗?
最后修改:2022 年 10 月 21 日 11 : 09 AM
如果觉得我的文章对你有用,请随意赞赏