Arduino學習筆記⑧ 紅外通信

版權聲明:本文爲博主 **單片機菜鳥** 一心一血敲出來的原創作品,未經博主允許不得轉載,多謝支持。

  • 本系列博客僅僅做個人技術交流分享,不做任何商業用途。如有不對之處,請留言,本人及時更改。

  • 如何和博主一起學習:

博主建立了ESP8266開發之旅學習羣,需要的同學請加 869920142

1.前言

    紅外通信是一種利用紅外光編碼進行數據傳輸的無線通信方式,在目前來說是使用非常廣泛的。生活中常見電視遙控器,空調遙控器,DVD遙控器(現在估計是老古董了),均使用紅外線遙控。使用紅外線遙控,主要有一體化紅外接收頭和紅外遙控器。

1.1 一體化紅外接收頭

    一體化接收頭內部集成了紅外接收電路。它可以接收紅外信號並還原發射端的波形信號。通常使用的一體化接收頭都是38KHz的紅外信號。

1.2 紅外遙控器

    實驗中採取以下遙控器

image

    每個按鍵都有各自的編碼,按下按鍵後,就會發送對應編碼的紅外波。大多使用NEC編碼。

    要想使用紅外遙控功能,我們使用第三方紅外遙控庫——IRremote(如果是8266請使用 IRremoteESP8266 庫)。

2.常用方法

下面介紹一下IRremote類庫
1)IRrecv類 用於接收紅外信號並對其解碼。在使用前需要實例化一個該類對象。

  • IRrecv(recvpin) 構造函數 recvpin爲連接到接收頭的引腳
  • enableIRIn()初始化紅外解碼
  • decode() 檢查是否接收到編碼
  • resume() 接收下一個編碼

3.實驗

實驗內容: 根據遙控器輸入的紅外信號,顯示對應的符號;

實驗代碼

/**
* @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;
}

實驗結果

image

4.總結

通過使用這個類庫 我們可以解析到具體的鍵碼,這樣我們就可以基於這個去做一些我們想做的紅外遙控功能(各位可以看看我寫的藍牙七彩燈帖子)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章