Arduino Serial.read(),读取与ASCII字符对应的错误十进制数

Arduino Serial.read(),读取与ASCII字符对应的错误十进制数,arduino,ascii,Arduino,Ascii,我正在写arduino草图,当通过串行端口提供特定字符时,它将完成特定的事情 我的arduino草图的重要部分是: while(Serial.available()){ Status = Serial.read(); Serial.println(Status); if (Status == A){ digitalWrite(led, HIGH); Serial.println("Pin 13 -> ON"); }else if(Status == B){

我正在写arduino草图,当通过串行端口提供特定字符时,它将完成特定的事情

我的arduino草图的重要部分是:

while(Serial.available()){
Status = Serial.read();
Serial.println(Status);

if (Status == A){
    digitalWrite(led, HIGH);
    Serial.println("Pin 13 -> ON");

  }else if(Status == B){
      digitalWrite(led, LOW);
      Serial.println("Pin 13 -> OFF");
    }
}
顺便说一句:变量状态是整数类型

问题是,它有时工作,有时不工作,所以当我上传草图时,它工作良好,我键入字母A,它被转换为数字65,键入字母B,它被转换为数字66。过了一段时间,它突然开始输出数字193和194。如果它返回193和194阿尔瓦,那就可以了,但它没有! 如果(Status==A)正在比较两个变量
Status
A
,希望有人知道解决方案,如果您需要更多信息…

您应该将其替换为
if(Status==“A”)

if(Status=='B')相同
好吧,193/194与65/66的差异仅为1位(MSB)。您可以像这样屏蔽最左边的位:

Status = Status & 01111111; // MSB will be zeroed
或者用双班制:

Status = Status << 1;
Status = Status >> 1; // now you have dropped the leftmost bit
Status=Status>1;//现在您已经删除了最左边的一位

请参阅文档

否,因为变量A=65和B=66分配了数字,所以串行读取转换为整数!当你在串行监视器中发送一个字符时,它会被识别为数字65。但这是一种处理接收数据的非常奇怪的方式。每个可能接收的字符都有一个变量?为什么不将其作为chars接收和处理?我们能看到你在哪里声明变量A,b,。。。?@mhopeng注意到您启用了MSB。如果将
无符号
有符号
短整数