我怎样才能在开关盒中倒退

How can I go reverse in a switch case

我有 2 个 LED,当我按下一个按钮时,它应该按以下顺序改变模式:关闭,第一个 LED 亮起,两个 LED 亮起,第二个 LED 亮起。 现在我想添加第二个按钮,功能相同但相反:第二个 LED 亮起,两个 LED 亮起,第一个 LED 亮起,熄灭。

我尝试创建第二个 switch-case,但它不起作用。

代码:

void loop()
{
  increase.update();
  decrease.update();

  //~~~Increase LED Pattern~~~
  if (increase.fell())
  {
    isPressed = true;
    changePattern();
  }
  else if (digitalRead(Button_Mode) == HIGH)
  {
    isPressed = false;
  }


  //~~~Decrease LED Pattern~~~
  if (decrease.fell())
  {
    isPressed = true;
    decreasePattern();
  }
  else if (digitalRead(Button_Mode) == HIGH)
  {
    isPressed = false;
  }
}


//-----------------Methods------------------
//~~~selects a pattern~~~
void increasePattern()
{
  switch (lightPattern)
  {
    case OFF:
      lightPattern = LED_1;
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, LOW);
      break;

    case LED_1:
      lightPattern = LED_12;
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, HIGH);
      break;

    case LED_12:
      lightPattern = LED_2;
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, HIGH);
      break;

    case LED_2:
      lightPattern = OFF;
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      break;
  }
}


void decreasePattern()
{
  switch (lightPattern)
  {
    case LED_2:
      lightPattern = LED_12;
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, LOW);
      break;

    case LED_12:
      lightPattern = LED_1;
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, HIGH);
      break;

    case LED_1:
      lightPattern = OFF;
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, HIGH);
      break;

    case OFF:
      lightPattern = LED_2;
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      break;
  }
}

提前致谢。

int stateLed1 = HIGH;

digitalWrite(LED_1, stateLed1);
digitalWrite(LED_2, !stateLed1);

我想试试 if。这是一个简短的例子:

if (digitalRead(btn)==1){
 val++;
 if (val==2){//write here max versions of led status
  val=0;}
 pulseIn(btn,HIGH);
}
switch(val){
case 0: digitalWrite(led,0); break;
case 1: digitalWrite(led,1); break;
//write here other options
}

我觉得这很简单,但是你的代码太复杂了。

祝你好运!

你的其他答案都很好,但我想勾勒出一个略有不同的方法。使用按钮增加或减少“状态”值(注意环绕!)。根据此状态使用单独的例程打开或关闭 LED。 loop() 里面的代码变得简单了。困难的部分是编写“isButton1Pressed()”例程!所有这一切的重点是将“输入”与“处理”与“输出”分开。每个例程都有一个小的、明确定义的部分要玩。希望这可以帮助!玩得开心!

const byte numstates = 4;

byte currentState = 0;      // counter with values 0..(numstate-1) only

void nextState() {
  currentState++;
  if (currentState >= numstates) {
    currentState = 0;
  }
}

void previousState() {
  currentState--;
  if (currentState < 0) {
    currentState = numstates-1;
  }
}

void showPattern() {
   switch (currentState) {
    case 0: // turn off LEDs
        // code here...
        break;
    case 1: // turn on LED1; turn off LED2
        // code here...
        break;
    // repeat for states 2 and 3
   }
}

void loop() {
    if (button1pressed()) {
        nextState();
    } else if (button2pressed()) {
        previousState();
    }
    showPattern();
}