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

基于ESP32的洗碗机多模式洗涤循环程序实现求助

多模式洗碗机控制程序适配方案

1. 修正洗涤模式参数配置

当前所有模式参数完全一致,无法区分不同流程,先按需求调整参数:

switch (currProg) {
    // 参数定义:水位, 预洗时间, 洗涤时间, 洗涤温度, 漂洗时间, 漂洗温度, 烘干时间, 烘干温度
    case hotFastProg: washprogconfig(high,5,15,60,10,60,10,70); break;
    case hotLongProg: washprogconfig(high,10,25,60,10,60,10,70); break;
    case coldFastProg: washprogconfig(high,5,15,0,10,0,10,50); break; // 冷水模式加热温度设为0,自动跳过加热逻辑
    case coldLongProg: washprogconfig(high,10,25,0,10,0,10,50); break;
    case fruitProg: washprogconfig(high,5,0,0,0,0,0,0); break; // 果蔬模式仅保留预洗,后续阶段时间全设为0
}

新增全局变量标记当前大流程阶段,程序启动时(progStart分支)记得初始化currStage = 0:

uint8_t currStage = 0; // 0=预洗阶段, 1=洗涤阶段, 2=漂洗阶段

2. 改造状态跳转逻辑

2.1 修正fill阶段跳转逻辑

原逻辑fill完成后固定跳wash,改为根据当前阶段匹配对应模式:

case fillin:
if (currMode != prevMode) {
  switchmode (fillTime, "fill");      
  digitalWrite (inlet, switchOn);
}
else if (waterLevel == high or (currProg == testProg and timeNow >= endTime)) {
  // 根据当前阶段跳转到对应洗涤模式
  switch(currStage) {
    case 0: currMode = prewash; break;
    case 1: currMode = wash; break;
    case 2: currMode = rinse; break;
  }
}
else if (timeNow >= endTime) {
  currMode = errPause;
}
break;

2.2 修正drain阶段跳转逻辑

原逻辑用固定循环次数判断流程不适配多模式,改为按阶段参数动态判断后续流程:

case drain: 
if (currMode != prevMode) {
  switchmode (drainTime, "Drain");
  delay (2000);
  digitalWrite (outlet, switchOn); 
}
else if (waterLevel == empty || (currProg == testProg && timeNow >= endTime)) {
  if(currStage == 0) { // 预洗阶段排水完成
    if(washTime > 0) { // 有洗涤阶段就进水走洗涤流程
      currStage = 1;
      currMode = fillin;
    } else { // 无洗涤阶段直接判断是否需要烘干
      if(dryTime > 0) currMode = dry;
      else currMode = complete;
    }
  } else if(currStage == 1) { // 洗涤阶段排水完成
    if(rinseTime > 0) { // 有漂洗阶段就进水走漂洗流程
      currStage = 2;
      currMode = fillin;
    } else { // 无漂洗阶段判断是否需要烘干
      if(dryTime > 0) currMode = dry;
      else currMode = complete;
    }
  } else if(currStage == 2) { // 漂洗阶段排水完成
    if(dryTime > 0) currMode = dry;
    else currMode = complete;
  }
}
else if (timeNow >= endTime) {          
  currMode = errPause;
}  
break;

2.3 修正switchmode函数

新增关闭烘干输出的逻辑,避免状态切换时烘干模块误启动:

void switchmode ( int induration, String newmsg) { 
  String outmsg = " mode started";
  prevMode = currMode;
  startTime = timeNow;
  endTime = startTime + induration;  
  outmsg = ": " + newmsg + outmsg;
  digitalWrite (outlet,  switchOff);
  digitalWrite (washPump,  switchOff);
  digitalWrite (inlet,  switchOff);
  digitalWrite (heater,  switchOff);
  digitalWrite (dryer, switchOff); // 新增关闭烘干模块
  heaterStatus = false;
}

3. 简化剩余时间计算逻辑

原重复累加逻辑容易出错,改为提前计算总时长、实时扣除已运行时长:

// 程序启动时计算一次总时长
uint32_t totalProgTime = 0;
if(prewashTime > 0) totalProgTime += drainTime + fillTime + prewashTime;
if(washTime > 0) totalProgTime += drainTime + fillTime + washTime;
if(rinseTime > 0) totalProgTime += drainTime + fillTime + rinseTime;
if(dryTime > 0) totalProgTime += dryTime + drainTime;

// 运行时剩余时间计算,progStartTime为程序启动时记录的timeNow值
remainProgTime = totalProgTime - (timeNow - progStartTime);
if(remainProgTime < 0) remainProgTime = 0;

4. 可选细节优化

  • 烘干阶段如果使用空气加热,不要用waterTemp判断温度,额外接NTC传感器测腔内空气温度
  • 冷水模式可新增逻辑,进水时直接走冷水阀,无需混合热水
  • 果蔬模式可降低洗涤泵输出功率,避免损伤果蔬表皮

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:39:02