так что я построил небольшой щит для Arduino Mega.Он имеет 2 красных светодиода, 2 синих светодиода, 2 зеленых светодиода, зуммер, светодиод RGB и ИК-приемник.Я пытаюсь симулировать ВКЛ и ВЫКЛ с помощью индикатора RGB, и когда он включен, вы можете выполнять действия, основываясь на кнопке, которую вы нажимаете на эмиттере.Все работает более или менее, как и ожидалось, но я не знаю, как выйти из цикла при каждом действии кнопки.Вот мой код:
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
}
}
С этим кодом невозможно выйти из цикла на кнопке 1 и кнопке 2 независимо от того, нажата ли другая кнопка.Поэтому я попытался добавить это в цикл:
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);
Но все равно не могу выйти из цикла независимо от того, какую кнопку я нажимаю.Затем я попытался добавить это в то время как:
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(!(irrecv.decode(&results)));
Но это также не выходит из цикла.Есть идеи?