紅外通訊是一種利用紅外光編碼進行數據傳輸的無線通訊方式,在目前來講是使用很是普遍的。生活中常見電視遙控器,空調遙控器,DVD遙控器(如今估計是老古董了),均使用紅外線遙控。使用紅外線遙控,主要有一體化紅外接收頭和紅外遙控器。git
一體化接收頭內部集成了紅外接收電路。它能夠接收紅外信號並還原發射端的波形信號。一般使用的一體化接收頭都是38KHz的紅外信號。github
實驗中採起如下遙控器函數
每一個按鍵都有各自的編碼,按下按鍵後,就會發送對應編碼的紅外波。大多使用NEC編碼。oop
要想使用紅外遙控功能,咱們使用第三方紅外遙控庫——IRremote(若是是8266請使用 IRremoteESP8266 庫)。測試
下面介紹一下IRremote類庫
1)IRrecv類 用於接收紅外信號並對其解碼。在使用前須要實例化一個該類對象。ui
實驗內容: 根據遙控器輸入的紅外信號,顯示對應的符號;編碼
實驗代碼:code
/** * @Desc 測試紅外通訊 * @author 單片機菜鳥 * @Date 2016/12/29 * */ #include <IRremote.h> #define MAX 22 int RECV_PIN = 7; //定義紅外接收模塊輸出口接arduino數字引腳11 IRrecv irrecv(RECV_PIN); decode_results results; //Car mp3編碼 unsigned long rremote_code[MAX] = { 0xFFA25D,0xFF629D,0xFFE21D,//CH- CH CH+ 0xFF22DD,0xFF02FD,0xFFC23D,//PREV NEXT PLAY 0xFFE01F,0xFFA857,0xFF906F,//VOL- VOL+ EQ 0xFF6897,0xFF9867,0xFFB04F,// 0 100+ 200+ 0xFF30CF,0xFF18E7,0xFF7A85,// 1 2 3 0xFF10EF,0xFF38C7,0xFF5AA5,// 4 5 6 0xFF42BD,0xFF4AB5,0xFF52AD, // 7 8 9 0xFFFFFFFF//長按 }; //Car mp3對應的字符串 String rremote_string[MAX] = { "CH-","CH","CH+", "PREV","NEXT","PLAY/PAUSE", "VOL-","VOL+","EQ", "0","100+","200+", "1","2","3", "4","5","6", "7","8","9", "longPress" }; void setup() { Serial.begin(9600); irrecv.enableIRIn(); //初始化紅外遙控 } void loop() { if (irrecv.decode(&results)) { //打印字符串 String codeString = getRremoteString(results.value); if(codeString.length()!=0) Serial.println(codeString); irrecv.resume(); // 接收下一個值 } } /** * 解析紅外編碼並返回對應的字符串 */ String getRremoteString(unsigned long code){ String rremotestring = ""; int i = 0; for(i = 0;i<MAX-1;i++){ if(code == rremote_code){ break; } } //過濾掉長按 if(i==MAX-1) return ""; else return rremote_string; }
實驗結果:對象
經過使用這個類庫 咱們能夠解析到具體的鍵碼,這樣咱們就能夠基於這個去作一些咱們想作的紅外遙控功能(各位能夠看看我寫的藍牙七彩燈帖子)。blog