如何调试库冲突?

时间:2017-08-09 22:52:21

标签: arduino

我正在参加Elegoo课程,并成功完成了数字键盘和IR远程课程。如果有人想看,课程代码和PDF都在http://www.elegoo.com/tutorial/Elegoo%20The%20Most%20Complete%20Starter%20Kit%20for%20UNO%20V1.0.17.8.3.zip

我现在正在尝试创建自己的项目,该项目使用 IR和键盘输入。我已合并代码,调整了引脚号,包括两个库(键盘和IRemote),代码基本上可以工作。具体来说,键盘工作正常,红外遥控器做了一些事情。所以我知道接线正常,输入设备都正常工作。

我遇到的问题是,IR遥控器上的任何按键都会显示为REPEAT而不是解码的键值。如果我注释掉键盘代码,则IR遥控器可以正常工作。因此,Keypad库似乎与IRemote库有些冲突。

我不是要求任何人为我调试库(但如果你想 - 不要让我阻止你)。相反,我正在寻找可能出现的各种冲突的指针,以便我自己做一些调试。

我的循环代码是:

void loop() {
  char key = keypad.getKey(); // IF I COMMENT OUT THIS LINE, IR WORKS OK
  // do something with key
  if (irrecv.decode(&results)) {
    // have we received an IR signal?
    translateIR();
    irrecv.resume(); // receive the next value
  }
}

void translateIR() {
  // takes action based on IR code received
  // describing Remote IR codes
  switch(results.value) {
    case 0xFFA25D: Serial.println("POWER"); break;
    case 0xFFE21D: Serial.println("FUNC/STOP"); break;
    case 0xFF629D: Serial.println("VOL+"); break;
    case 0xFF22DD: Serial.println("FAST BACK"); break;
    case 0xFF02FD: Serial.println("PAUSE");    break;
    case 0xFFC23D: Serial.println("FAST FORWARD"); break;
    case 0xFFE01F: Serial.println("DOWN"); break;
    case 0xFFA857: Serial.println("VOL-"); break;
    case 0xFF906F: Serial.println("UP"); break;
    case 0xFF9867: Serial.println("EQ"); break;
    case 0xFFB04F: Serial.println("ST/REPT"); break;
    case 0xFF6897: Serial.println("0"); break;
    case 0xFF30CF: Serial.println("1"); break;
    case 0xFF18E7: Serial.println("2"); break;
    case 0xFF7A85: Serial.println("3"); break;
    case 0xFF10EF: Serial.println("4"); break;
    case 0xFF38C7: Serial.println("5"); break;
    case 0xFF5AA5: Serial.println("6"); break;
    case 0xFF42BD: Serial.println("7"); break;
    case 0xFF4AB5: Serial.println("8"); break;
    case 0xFF52AD: Serial.println("9"); break;
    case 0xFFFFFFFF: Serial.println(" REPEAT");break;  
    default: 
      Serial.println(" other button   ");
  }// End Case
  delay(500); // Do not get immediate repeat
} //END translateIR

1 个答案:

答案 0 :(得分:0)

看起来我遇到了已知问题https://github.com/z3t0/Arduino-IRremote/issues/251

相关问题