Arduino异常第二次在串行上运行

问题描述

运行以下程序时,它会按预期运行,但会为-38添加一个附加输出作为输入。不管我使用什么输入,它也会打印为-38。

maven

输出如下:

container('XXXX')

解决方法

您的问题可能是Serial.flush。如the documentation所述,

等待传出串行数据的传输完成。 (在Arduino 1.0之前,它会删除所有缓冲的传入串行数据。)

您似乎试图实现刷新传入缓冲区的1.0版之前的行为。因此,基本上Serial.flush在您的草图中什么也不做,这导致第二次运行并使用换行符(ASCII中的10)进行计算。

您可以像这样清除缓冲区:

while ( Serial.available() > 0 ) {
    Serial.read();
}

但是请注意,这部分

while (Serial.available()>0)
  {
    number = Serial.read() - '0';
    // read the number in buffer and
    //remove ASCII text for "0"  
  }

可能不完全符合您的预期。例如,如果您要通过串行发送12,则只能打印最后一个字符(2)的结果。您的程序也可能只输出-38结果,因为最后一个字符始终是换行符。基本上,您只是幸运而已,串行数据的发送速度还不够快,因此无法实现,但是一旦循环时间变长,它就有可能发生。

我宁愿建议您也将计算部分移入循环内并检查输入数据,而不要在第一个字符之后刷新缓冲区。考虑一下:

while ( Serial.available() > 0 )
{
    // read the number in buffer and
    number = Serial.read();
    
    // make sure the character is 0 - 9 in ASCII
    if( number < '0' || number > '9' ){
        // invalid character,skip
        continue;
    }
    
    //remove ASCII text for "0"  
    number = number - '0';
    
    Serial.print("You entered: ");
    Serial.println(number);
    Serial.print(number);
    Serial.print(" multiplied by two is ");
    number = number * 2;
    Serial.println(number);
}
  

这将逐字节读取缓冲区,并将乘法应用于每个(有效)字符。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...