使用枚举切换不工作 - Arduino Mega 2560

Switch with enum not working - Arduino Mega 2560

这只是我的问题的一个 "working" 示例。 在循环函数中更改按钮值,它应该打印到串行监视器 "DOWN" 和 "UP",但只打印第一个。但是,如果在 change_timestamp_selected 函数中注释 bool 变量,程序将按其应有的方式运行...

如果有人能发现错误,请帮助我。谢谢。

enum btn {btnRIGHT, btnUP, btnDOWN, btnLEFT, btnSELECT, btnNONE} button;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}


void loop() {
  button = btnDOWN;
  change_timestamp_selected();
  delay(1000);
  button = btnUP;
  change_timestamp_selected();
  delay(1000);
}
void change_timestamp_selected() {
  switch (button) {
    case btnDOWN:
      Serial.println("DOWN");
      bool if_commented_works = true;
      break;
    case btnUP:
      Serial.println("UP");
      break;
  }
}

老实说,这让我有点难过,但我自己编译后发现了这个问题。这是一个 Error: Jump to case label 最赞的回复,有一个很好的解释,但总结一下:您在编译器认为相同的范围内声明了这个变量,因此编译器知道它在那里,但是当它返回到该范围对于为什么未声明它感到困惑。