不知道这 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 中输入的默认会有回车符号吗?