You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:46:18