本帖最后由 单片机菜鸟 于 2016-12-29 23:40 编辑
一、前言
红外通信是一种利用红外光编码进行数据传输的无线通信方式,在目前来说是使用非常广泛的。生活中常见电视遥控器,空调遥控器,DVD遥控器(现在估计是老古董了),均使用红外线遥控。使用红外线遥控,主要有一体化红外接收头和红外遥控器。
1.一体化红外接收头
一体化接收头内部集成了红外接收电路。它可以接收红外信号并还原发射端的波形信号。通常使用的一体化接收头都是38KHz的红外信号。
2.红外遥控器
实验中采取以下遥控器
每个按键都有各自的编码,按下按键后,就会发送对应编码的红外波。大多使用NEC编码。
要想使用红外遥控功能,我们使用第三方红外遥控库-IRremote库.可以从github/Arduino-IRremote下载。
下面介绍一下IRremote类库:
1)IRrecv类 用于接收红外信号并对其解码。在使用前需要实例化一个该类对象。
1.1 IRrecv(recvpin) 构造函数 recvpin为连接到接收头的引脚
1.2 enableIRIn()初始化红外解码
1.3 decode() 检查是否接收到编码
1.4 resume() 接收下一个编码
因为没有发射管,不讲解红外信号发送功能。
二、实验内容
1. 根据遥控器输入的红外信号,显示对应的符号
三、实验过程
代码: - /**
- * @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[i]){
- break;
- }
- }
- //过滤掉长按
- if(i==MAX-1) return "";
- else return rremote_string[i];
- }
复制代码
结果:
四、总结
通过使用这个类库 我们可以解析到具体的键码,这样我们就可以基于这个去做一些我们想做的红外遥控功能(各位可以看看我写的蓝牙七彩灯帖子)。 |