Arduino红外线接收器和循环

时间:2018-10-17 10:42:47

标签: arduino

所以我为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);

但是它也不退出循环。有想法吗?

0 个答案:

没有答案