Arduino Uno输入数字显示异常求助:多位数被拆分显示
Arduino串口输入完整数字及触发逻辑实现
问题根源
你当前的代码每次仅读取串口缓冲区的单个字符,所以输入200这类多位数时,会被拆分成'2'、'0'、'0'依次输出,无法获取完整的数字值。
修改后的代码
const int ledPin = 3; const int rePin = 2; const int puPin = 1; int pulso = 0; String inputStr = ""; // 用于缓存输入的字符串 void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); pinMode(rePin, OUTPUT); pinMode(puPin, INPUT); // 初始提示用户输入 Serial.println("请输入脉冲数,按回车确认:"); } void loop() { // 读取串口输入直到收到换行符 while (Serial.available() > 0) { char incomingChar = Serial.read(); if (incomingChar == '\n') { // 用户按下回车,输入完成 pulso = inputStr.toInt(); // 将字符串转为整数 Serial.print("Numero de pulsaciones: "); Serial.println(pulso); // 完整显示输入的数值 // 判断脉冲数是否小于35 if (pulso < 35) { digitalWrite(ledPin, HIGH); // 点亮LED digitalWrite(rePin, HIGH); // 触发放电(假设rePin为放电控制引脚) Serial.println("脉冲数小于35,已触发放电并点亮LED"); } else { digitalWrite(ledPin, LOW); // 关闭LED digitalWrite(rePin, LOW); // 停止放电 Serial.println("脉冲数大于等于35,未触发放电"); } inputStr = ""; // 清空缓存,准备下一次输入 Serial.println("\n请输入脉冲数,按回车确认:"); // 再次提示输入 } else if (incomingChar != '\r') { // 过滤回车符的冗余部分 inputStr += incomingChar; // 将字符添加到缓存字符串 } } }
关键逻辑说明
- 字符串缓存输入:用
String inputStr存储用户输入的所有字符,直到检测到换行符(用户按回车),确保获取完整的数字序列。 - 字符串转整数:通过
inputStr.toInt()将缓存的字符串转换为整数类型,得到完整的脉冲数值。 - 触发逻辑:判断数值是否小于35,对应控制LED和放电引脚的电平状态,同时给出串口提示。
- 循环输入提示:每次输入完成后清空缓存并重新提示,支持多次输入操作。
内容的提问来源于stack exchange,提问作者JAN BONCOMPTE BOSA
相关产品推荐
相关产品推荐

