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

使用switch case函数始终进入首个case的问题排查求助

问题分析与修复方案

核心问题

  1. case_value重复初始化:每次loop()执行时,你都把case_value设为1,这意味着程序每次循环都会从头进入case 1,永远没机会触发其他case分支。
  2. case_value类型错误:你用bool类型存储1/2/3/4,但bool只能表示0或1,2/3/4都会被隐式转换为1,直接导致case 2/3/4永远匹配不上。
  3. if语句缺少花括号:所有if条件后都没加{},只有紧跟的第一行代码属于条件判断范围,后面的lcd.print、delay等会无条件执行,逻辑完全混乱。

修复后的代码

// 将case_value移到loop外部,避免每次循环重置
int case_value = 1;

void loop() {
  // 等待按钮按下
  while (digitalRead(BUTTON) == HIGH) {
    delay(1000);
    Serial.println("WAITING");
    lcd.setCursor(0,1); 
    lcd.print(" PRESS TO START");
  }    

  switch (case_value) {
    case 1:
      if ((digitalRead(SW1) == LOW) && (digitalRead(SW2) == LOW) && (digitalRead(SW3) == HIGH)) {
        lcd.clear();
        lcd.print("VERIFYING BM762");
        delay(1000);
        Check_BM762();
        case_value = 2; // 执行完成后切换到下一个case,可按需调整
      }
      break;

    case 2:
      if ((digitalRead(SW1) == LOW) && (digitalRead(SW2) == HIGH) && (digitalRead(SW3) == LOW)) {
        lcd.clear();
        lcd.print("VERIFYING TR");
        delay(1000);
        Check_TR();
        case_value = 3;
      }
      break;

    case 3:
      if ((digitalRead(SW1) == LOW) && (digitalRead(SW2) == HIGH) && (digitalRead(SW3) == HIGH)) {
        lcd.clear();
        lcd.print("VERIFYING LEDs");
        delay(1000);
        Check_LEDs();
        case_value = 4;
      }
      break;

    case 4:
      if ((digitalRead(SW1) == HIGH) && (digitalRead(SW2) == LOW) && (digitalRead(SW3) == LOW)) {
        lcd.clear();
        lcd.print("VERIFYING BM763/807");
        delay(1000);
        Check_BM763();
        case_value = 1; // 执行完成后回到初始case,可按需调整
      }
      break;

    default:
      case_value = 1; // 默认回到初始状态
  }
}

额外说明

  • 将case_value类型改为int,才能正确存储1-4的数值。
  • 把case_value声明在loop()外部,确保其值在循环中不会被重置,实现分支切换。
  • 所有if条件添加{},保证代码块内的逻辑只有在条件满足时才执行。
  • 可根据实际需求调整case_value的切换逻辑,比如执行完所有case后是否循环回到初始状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:17:36