2023年9月26日 星期二

紅外線(Infrared,IR)代碼擷取

紅外線(Infrared,IR)的通訊分為接收與發射模組,紅外線數不可見光,波長在約在770nm(奈米)至1mm(毫米)之間。紅外線的通訊編碼規則,由紅外線數據協會(IrDA,Infrared Data Association),於1994年時發表了IrDA1.0通用規範,但目前市面上的紅外線產品所使用的規格除了IrDA規範之外,還有部分廠商自行開發出紅外線規格,如NEC的PD6122及Philips的RC-5、RC-6。



  本實作使用VS1938B的紅外線接收模組,與一般通用之NEC的PD6122編碼紅外線遙控器。



  紅外線接收模組只有三支接腳,價格便宜一隻約2~5元(台幣),外觀尺寸與接腳說明如下圖。

  測試程式碼如下,按下遙控器上的按鍵即會將其對應代碼輸出於序列埠通訊視窗。
#include <IRremote.h>  //引入紅外線通訊函數庫
const int RECV_PIN = 2;  //訊號接腳是2號
IRrecv irrecv(RECV_PIN);  //建置IR接收器
decode_results results;
void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); //啟動紅外線接收功能
  irrecv.blink13(true); //接收到訊號閃一下主板上的指示燈L
}
void loop() {
  if (irrecv.decode(&results))  //接收並解碼紅外線訊號
  {
      if (results.decode_type == NEC) 
        Serial.print("NEC: ");
      else if (results.decode_type == SONY)
        Serial.print("SONY: ");
      else if (results.decode_type == RC5) 
        Serial.print("RC5: ");
      else if (results.decode_type == RC6) 
        Serial.print("RC6: ");
      else if (results.decode_type == UNKNOWN) 
        Serial.print("UNKNOWN: ");
      Serial.println(results.value, HEX); //輸出遙控案件的代碼
      irrecv.resume();   //重置IR接收器
  }
}

  以下是實作後取得的代碼:
0-->NEC: FF6897
1-->NEC: FF30CF
2-->NEC: FF18E7
3-->NEC: FF7A85
4-->NEC: FF10EF
5-->NEC: FF38C7
6-->NEC: FF5AA5
7-->NEC: FF42BD
8-->NEC: FF4AB5
9-->NEC: FF52AD
CH-  -->NEC: FFA25D
CH   -->NEC: FF629D
CH+  -->NEC: FFE21D
|<<  -->NEC: FF22DD
>>|  -->NEC: FF02FD
>||  -->NEC: FFC23D
-    -->NEC: FFE01F
+    -->NEC: FFA857
EQ   -->NEC: FF906F

沒有留言:

張貼留言

熱門文章