arduino程序仅在启动时运行

时间:2013-07-15 09:19:27

标签: arduino arduino-ide

我的arduino程序仅在启动或按下重置按钮时运行,我不知道问题,因为我是一个新的蜜蜂。请帮忙。

我在这里有一些常量用于遥控器,我只是想复制我通过arduino ir led发送的内容,除了程序只运行一次外,每件事情都运行正常。

    #include <IRremote.h>       // use the library 


  #define PanasonicAddress      0x4004     // Panasonic address (Pre data) 
  #define PanasonicPower        0x100BCBD  // Panasonic Power button
  #define PanasonicZero        0x1009899  // Panasonic button
  #define PanasonicOne        0x1000809  // Panasonic button
  #define PanasonicTwo        0x1008889  // Panasonic button
  #define PanasonicThree        0x1004849  // Panasonic button
  #define PanasonicFour        0x100C8C9  // Panasonic button
  #define PanasonicFive        0x1002829  // Panasonic button
  #define PanasonicSix        0x100A8A9  // Panasonic button
  #define PanasonicSeven        0x1006869  // Panasonic button
  #define PanasonicEight        0x100E8E9  // Panasonic button
  #define PanasonicNine        0x1001819  // Panasonic button

  #define PMute        0x1004C4D
  #define PCPlus        0x1002C2D
  #define PCMinus        0x100ACAD
  #define PVMinus        0x1008485
  #define PVPlus        0x1000405
  #define PRTune        0x100ECED
  #define JVCPower      0xC5E8

    int receiverpin = 15; // pin 1 of IR receiver to Arduino digital pin 15 
    IRsend irsend;
    IRrecv irrecv(receiverpin); // create instance of irrecv
    decode_results results; 


  void setup()
  {
  Serial.begin(9600); 
  irrecv.enableIRIn();         // start the IR receiver
 // pinMode(7, OUTPUT);
  for (int z = 11 ; z < 14 ; z++) // set up digital pins 
  {
    pinMode(z, OUTPUT);
  }
}

void loop()
{
  if (irrecv.decode(&results)) // have we received an IR signal?
  {
    translateIR();
  for (int z = 0 ; z < 2 ; z++) // ignore the repeated codes
    {
      irrecv.resume(); // receive the next value
    }
  }
}


  void translateIR() 
  // takes action based on IR code received
  // uses Sony IR codes
  {
    switch(results.value)
  {
     case PanasonicFour:  pinOnTriple(1, 0, 0); 
     irsend.sendPanasonic(PanasonicAddress,PanasonicFour); // This should turn your TV on and off
     break; // 2

    case PanasonicTwo:  pinOnTriple(0, 1, 0); 
    irsend.sendPanasonic(PanasonicAddress,PanasonicTwo); 
    break; // 3


    case PanasonicFive:  pinOnTriple(HIGH, LOW, HIGH); 
    irsend.sendPanasonic(PanasonicAddress,PanasonicFive); 
    break; // 5

    case PanasonicSix:  pinOnTriple(HIGH, HIGH, LOW); 
    irsend.sendPanasonic(PanasonicAddress,PanasonicSix); 
    break; // 6

    case PanasonicSeven:  pinOnTriple(HIGH, HIGH, HIGH); 
    irsend.sendPanasonic(PanasonicAddress,PanasonicSeven); 
    break; // 7

    case PanasonicZero:  pinOnTriple(LOW, LOW, LOW); 
    irsend.sendPanasonic(PanasonicAddress,PanasonicZero); 
    break; // 8

    case PanasonicOne:  pinOnTriple(LOW, LOW, HIGH); 
    irsend.sendPanasonic(PanasonicAddress,PanasonicOne); 
    break; // 9

    case PanasonicThree:  pinOnTriple(LOW, HIGH, HIGH); 
    irsend.sendPanasonic(PanasonicAddress,PanasonicThree); 
    break; // 10

   case 0x100BCBD:  pinOnTriple(LOW, LOW, LOW); 
    irsend.sendPanasonic(PanasonicAddress,PanasonicPower); // This should turn your TV on and off
     irsend.sendJVC(JVCPower, 16,0); // hex value, 16 bits, no repeat
      delay(50); // see http://www.sbprojects.com/knowledge/ir/jvc.php for information
      irsend.sendJVC(JVCPower, 16,1); // hex value, 16 bits, repeat
      delay(50);
    break;

    case 0x1004C4D:  
    irsend.sendPanasonic(PanasonicAddress,PMute);
    break; // 11         
    case 0x1002C2D: 
    irsend.sendPanasonic(PanasonicAddress,PCPlus); 
    break; // 11         
    case 0x100ACAD:   
    irsend.sendPanasonic(PanasonicAddress,PCMinus); 
    break; // 11
    case 0x1008485: 
    irsend.sendPanasonic(PanasonicAddress,PVMinus); 
    break; // 11         
    case 0x1000405: 
    irsend.sendPanasonic(PanasonicAddress,PVPlus); 
    break; // 11
    case 0x100ECED:  
    irsend.sendPanasonic(PanasonicAddress,PRTune); 
    break; // 11
}
}


void pinOnTriple(int pin, int pino, int pini) // turns on digital pins for 1 second
{
  digitalWrite(11, pin);
  digitalWrite(12, pino);
  digitalWrite(13, pini);
  delay(1000);

  digitalWrite(11, 0);
  digitalWrite(12, 0);
  digitalWrite(13, 0);


}

1 个答案:

答案 0 :(得分:0)

您应该检查是否接收重复代码(0xFFFFFF)并忽略此代码。只需发出一次resume命令。您可能会意外地跳过有效代码。

此外,您需要在发送IR后发出简历(tx禁用rx)。

这最后一个可能是你的问题。

希望有所帮助

可能值得在re-tx之前延迟,因为tx可能与重复代码重叠

对于任何对IR协议感兴趣的人 - 我们刚刚推出了一个AnalysIR项目 - IR Decoder&amp;分析器GUI(Arduino&amp; Raspberry Pi)。目前,我们支持17种IR协议,并且正在寻找更多内容作为活动的一部分。建议欢迎!

如果项目成功,我们希望添加对Raspberry Pi的支持!

您可以访问http://igg.me/at/AnalysIR/x/3752156或屏幕截图,通过www.AnalysIR.com了解更多内容并支持项目