代码如下,功能很简单:判断输入的是否为 0xaa, 如果是就输出一段字符,如果不是输出另外一段:
void setup() {
Serial.begin(9600);
}
void loop() {
while (Serial.available()) {
char c = Serial.read();
if (c == 0xaa) {
Serial.println("Get 0xaa");
} else {
Serial.print("Not 0xaa. You have input ");
Serial.println(c,HEX);
}
}
}
实验平台是 Leonardo, 实验结果如下:
为什么输入的 0xaa 会被判定为 ffffffaa
在 \arduino-1.8.4\hardware\arduino\avr\cores\arduino\CDC.cpp 有如下定义:
int Serial_::read(void)
{
if (peek_buffer >= 0) {
int c = peek_buffer;
peek_buffer = -1;
return c;
}
return USB_Recv(CDC_RX);
}
对于 0xaa 来说,转换为 int 之后的结果就是 ffffffaa,可以用下面的代码来验证:
char c=0xaa;
Serial.println((int)c,HEX);
结果
知道了原因,修改方法也很简单,在变量声明的地方定义为 byte c 即可。