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

Arduino PID温控器旋转编码器无法下调设定温度求助

问题排查与修复

1. 核心问题:编码器读取被阻塞

在loop()函数的运行模式(encoder_btn_count == 1)中,delay(200)会阻塞程序200毫秒,这段时间内编码器的脉冲无法被及时捕获,导致逆时针旋转的信号被遗漏,表现为无法下调温度。

修复方案:用非阻塞定时替代delay(),确保read_encoder()能被高频调用:

// 新增全局变量,控制显示更新间隔
unsigned long lastDisplayUpdate = 0;
const long displayUpdateInterval = 200;

void loop()
{
  read_encoder();
  set_temp();
  if (encoder_btn_count == 1) 
  {
    temperature_value_c = thermocouple.readCelsius();
    int output = pid.compute(temperature_value_c);    
    analogWrite(mosfet_pin, output);           
    pid.setpoint(set_temperature);

    // 非阻塞更新OLED显示
    if (millis() - lastDisplayUpdate >= displayUpdateInterval) {
      lastDisplayUpdate = millis();
      display.clearDisplay();
      display.setTextSize(2);
      display.setCursor(16, 0);
      display.print("Cur Temp.");
      display.setCursor(45, 25);
      display.print(temperature_value_c);
      display.display();

#ifdef __DEBUG__
      Serial.print(temperature_value_c);
      Serial.print("   ");
      Serial.println(output);
#endif
    }
  }
}

2. 辅助优化:编码器信号稳定性与初始状态

  • 给CLK、DATA引脚启用内部上拉,增强信号抗干扰能力,避免误判:
void setup() {
  // ... 其他代码 ...
  pinMode(CLK_PIN, INPUT_PULLUP); // 替换原INPUT为INPUT_PULLUP
  pinMode(DATA_PIN, INPUT_PULLUP); // 替换原INPUT为INPUT_PULLUP
  clockPinState = digitalRead(CLK_PIN); // 初始化CLK引脚初始状态
  // ... 其他代码 ...
}

3. 可选调整:方向判断逻辑适配硬件

如果上述修复后方向仍异常,可能是编码器相位与代码逻辑不符,可尝试调整边沿检测条件(改为检测下降沿):

void read_encoder()
{
  clockPin = digitalRead(CLK_PIN);
  // 改为检测CLK引脚从高到低的下降沿
  if (clockPin != clockPinState && clockPin == 0) { 
    if (digitalRead(DATA_PIN) == clockPin) { 
      set_temperature -= 3;
    } else {
      set_temperature += 3;
    }
    if (set_temperature < 1) set_temperature = 1;
    if (set_temperature > 150) set_temperature = 150;
#ifdef __DEBUG__
    Serial.println(set_temperature);
#endif
  }
  clockPinState = clockPin;

  // ... 按钮检测代码保持不变 ...
}

内容的提问来源于stack exchange,提问作者rgbyello

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:30:50