程序开始时,提示遥控键0~4的代码,然后程序通过设置LED的亮度来对被按下的按钮作出响应,以0关闭LED,1~4提供增加的亮度。
代码如下:(需要使用IRremote库,可在库管理中搜索该库进行下载后即可使用)
#include <IRremote.h> const int irReceiverPin = 2; const int ledPin = 9; const int numberOfKeys = 5; long irKeyCodes[numberOfKeys]; IRrecv irrecv(irReceiverPin); decode_results results; void setup() { Serial.begin(9600); pinMode(irReceiverPin, INPUT); pinMode(ledPin, OUTPUT); irrecv.enableIRIn(); learnKeycodes(); Serial.println("Press a remote key"); } void loop() { long key; int brightness; if(irrecv.decode(&results)) { // 如果接收到数据 irrecv.resume(); key = convertCodeToKey(results.value); if(key >= 0) { Serial.print("Got key "); Serial.println(key); brightness = map(key, 0, numberOfKeys-1, 0, 255); analogWrite(ledPin, brightness); } } } // 获取遥控编码 void learnKeycodes() { while(irrecv.decode(&results)) // 清空缓冲区 irrecv.resume(); Serial.println("Ready to learn remote codes"); long prevValue = -1; int i = 0; while( i < numberOfKeys){ Serial.print("press remote key"); Serial.print(i); while(true){ if(irrecv.decode(&results)){ if(results.value != -1 && results.value != prevValue){ showReceivedData(); irKeyCodes[i] = results.value; i++; prevValue = results.value; irrecv.resume(); // 接收下一个值 break; } irrecv.resume(); // 接收下一个值 } } } Serial.println("Learning complete"); } // 将一个遥控协议代码转为逻辑键码,如果没有收到代码返回 -1 int convertCodeToKey(long code) { for(int i=0; i<numberOfKeys; i++){ if(code == irKeyCodes[i]){ return i; // 找到键值返回 } } return -1; } void showReceivedData() { if(results.decode_type == UNKNOWN){ Serial.println("-Could not decode message"); }else{ if(results.decode_type == NEC) { Serial.print("- decode NEC:"); }else if(results.decode_type == SONY){ Serial.print("- decode SONY:"); }else if(results.decode_type == RC5){ Serial.print("- decode RC5:"); } Serial.print("hex value = "); Serial.println(results.value, HEX); } }
也可以永久的保存按键编码的值,这样就可以不需要每次程序启动时去学习。用以下代码更换irKeyCodes的声明来初始化每个键的值。
改变这些值使之遥控器的值相吻合(当你按下键时 learnKeyCodes函数会把它们显示在串行监视器中)。
long irKeyCodes[numberOfKeys] = { 0x18E758A7, // 0 键 0X18E708F7, // 1 键 0X18E78877, // 2 键 0X18E748B7, // 3 键 0X18E7C837, // 4 键 }
原文:http://www.cnblogs.com/hersion/p/6284313.html