我怎样才能在开关盒中倒退
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();
}
我有 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();
}