ИК-приемник Arduino и шлейфы - PullRequest
0 голосов
/ 17 октября 2018

так что я построил небольшой щит для 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)));

Но это также не выходит из цикла.Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...