所以我为arduino mega建造了一个小盾牌。它有2个红色LED,2个蓝色LED,2个绿色LED,一个蜂鸣器,一个RGB LED和一个IR接收器。我正在尝试使用rgb led模拟开和关,当它打开时,您可以根据在发射器上按下的按钮执行操作。一切都或多或少按预期工作,但我不知道如何在每个按钮动作上退出循环。这是我的代码:
String.prototype.isJson = () => 'your logic here'
使用此代码后,无论我按下其他哪个按钮,都无法退出按钮1和按钮2的循环。所以我尝试将其添加到循环中:
int receiver = 9;
IRrecv irrecv(receiver);
decode_results results;
void translateIR()
{
switch(results.value)
{
case 0xFFA25D: power(); break;
case 0xFF30CF: button1(); break;
case 0xFF18E7: button2(); break;
case 0xFF7A85: button3(); break;
case 0xFF10EF: button4(); break;
case 0xFF38C7: button5(); break;
case 0xFF5AA5: button6(); break;
case 0xFF42BD: button7(); break;
case 0xFF4AB5: button8(); break;
case 0xFF52AD: button9(); break;
default:;
}
}
void button1()
{
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDB1, LOW);
digitalWrite(LEDB2, LOW);
digitalWrite(LEDG1, LOW);
digitalWrite(LEDG2, LOW);
digitalWrite(buzzer,LOW);
do{
digitalWrite(LEDR1, HIGH);
digitalWrite(LEDR2, HIGH);
digitalWrite(LEDB1, LOW);
digitalWrite(LEDB2, LOW);
digitalWrite(LEDG1, LOW);
digitalWrite(LEDG2, LOW);
digitalWrite(buzzer,HIGH);
delay(200);
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDB1, HIGH);
digitalWrite(LEDB2, HIGH);
digitalWrite(LEDG1, LOW);
digitalWrite(LEDG2, LOW);
digitalWrite(buzzer,LOW);
delay(200);
} while(1);
}
void button2()
{
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDB1, LOW);
digitalWrite(LEDB2, LOW);
digitalWrite(LEDG1, LOW);
digitalWrite(LEDG2, LOW);
digitalWrite(buzzer,LOW);
do{
digitalWrite(LEDR1, HIGH);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDB1, LOW);
digitalWrite(LEDB2, LOW);
digitalWrite(LEDG1, LOW);
digitalWrite(LEDG2, LOW);
digitalWrite(buzzer,HIGH);
delay(50);
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, HIGH);
digitalWrite(LEDB1, LOW);
digitalWrite(LEDB2, LOW);
digitalWrite(LEDG1, LOW);
digitalWrite(LEDG2, LOW);
digitalWrite(buzzer,LOW);
delay(50);
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDB1, HIGH);
digitalWrite(LEDB2, LOW);
digitalWrite(LEDG1, LOW);
digitalWrite(LEDG2, LOW);
digitalWrite(buzzer,HIGH);
delay(50);
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDB1, LOW);
digitalWrite(LEDB2, HIGH);
digitalWrite(LEDG1, LOW);
digitalWrite(LEDG2, LOW);
digitalWrite(buzzer,LOW);
delay(50);
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDB1, LOW);
digitalWrite(LEDB2, LOW);
digitalWrite(LEDG1, HIGH);
digitalWrite(LEDG2, LOW);
digitalWrite(buzzer,HIGH);
delay(50);
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDB1, LOW);
digitalWrite(LEDB2, LOW);
digitalWrite(LEDG1, LOW);
digitalWrite(LEDG2, HIGH);
digitalWrite(buzzer,LOW);
delay(50);
} while(1);
}
void loop() {
if (irrecv.decode(&results)) // have we received an IR signal?
{
translateIR();
irrecv.resume(); // receive the next value
}
}
但是无论我按下什么按钮,仍然无法退出循环。然后我尝试在一段时间内添加:
do{
digitalWrite(LEDR1, HIGH);
digitalWrite(LEDR2, HIGH);
digitalWrite(LEDB1, LOW);
digitalWrite(LEDB2, LOW);
digitalWrite(LEDG1, LOW);
digitalWrite(LEDG2, LOW);
digitalWrite(buzzer,HIGH);
delay(200);
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDB1, HIGH);
digitalWrite(LEDB2, HIGH);
digitalWrite(LEDG1, LOW);
digitalWrite(LEDG2, LOW);
digitalWrite(buzzer,LOW);
delay(200);
if (irrecv.decode(&results)) // have we received an IR signal?
{
translateIR();
irrecv.resume(); // receive the next value
}
} while(1);
但是它也不退出循环。有想法吗?