如何解决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);
}
这将逐字节读取缓冲区,并将乘法应用于每个(有效)字符。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。