Arduino串口读取字符程序为何会额外打印十进制值10
额外打印10的原因
输出里的10是ASCII表中**换行符(LF, \n)**对应的十进制数值,不是程序运行出错。
你通过Arduino串口监视器发送输入内容时,如果底部的行尾选项没有设置为「无结束符」,串口工具会自动在你输入的可见字符末尾追加控制字符作为行尾标记:
- 选「换行(NL)」时会自动追加ASCII值为10的换行符,就是你看到的额外输出
- 选「回车(CR)」时会自动追加ASCII值为13的回车符,会额外打印13
- 选「NL+CR」时会同时追加两个控制字符,会连续打印13、10两个额外数值
解决方法
二选一即可:
- 调整串口监视器配置:打开Arduino串口监视器,把底部行尾下拉选项改成「无结束符(No line ending)」,发送内容时就不会自动追加额外控制字符,不会再出现多余的10。
- 代码层过滤非可见字符:如果需要保留行尾标记的发送功能,可以在读取串口数据后加判断,过滤掉ASCII值小于32的非可见控制字符,只打印有效输入对应的数值,修改后代码如下:
int variable; void setup() { Serial.begin(9600); } void loop() { if(Serial.available() > 0) { variable = Serial.read(); // 跳过换行、回车这类非可见控制字符的输出 if (variable >= 32) { Serial.println(variable); } } }
内容的提问来源于stack exchange,提问作者Berat Durmus
相关产品推荐
相关产品推荐

