极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11840|回复: 1

《博哥Arduino学习笔记系列》- 第八课 红外通信

[复制链接]
发表于 2016-12-29 23:41:14 | 显示全部楼层 |阅读模式
本帖最后由 单片机菜鸟 于 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. 根据遥控器输入的红外信号,显示对应的符号
三、实验过程
      代码:
  1. /**
  2. * @Desc  测试红外通信
  3. * @author 单片机菜鸟
  4. * @Date  2016/12/29
  5. *
  6. */
  7. #include <IRremote.h>

  8. #define MAX 22

  9. int RECV_PIN = 7;      //定义红外接收模块输出口接arduino数字引脚11
  10.   
  11. IRrecv irrecv(RECV_PIN);
  12. decode_results results;
  13. //Car mp3编码
  14. unsigned long rremote_code[MAX] = {
  15.     0xFFA25D,0xFF629D,0xFFE21D,//CH- CH CH+
  16.     0xFF22DD,0xFF02FD,0xFFC23D,//PREV NEXT PLAY
  17.     0xFFE01F,0xFFA857,0xFF906F,//VOL- VOL+ EQ
  18.     0xFF6897,0xFF9867,0xFFB04F,// 0 100+ 200+
  19.     0xFF30CF,0xFF18E7,0xFF7A85,// 1  2  3
  20.     0xFF10EF,0xFF38C7,0xFF5AA5,// 4  5  6
  21.     0xFF42BD,0xFF4AB5,0xFF52AD, // 7  8  9
  22.     0xFFFFFFFF//长按
  23. };

  24. //Car mp3对应的字符串
  25. String rremote_string[MAX] = {
  26.    "CH-","CH","CH+",
  27.    "PREV","NEXT","PLAY/PAUSE",
  28.    "VOL-","VOL+","EQ",
  29.    "0","100+","200+",
  30.    "1","2","3",
  31.    "4","5","6",
  32.    "7","8","9",
  33.    "longPress"
  34. };
  35.   
  36. void setup()
  37. {
  38.   Serial.begin(9600);
  39.   irrecv.enableIRIn(); //初始化红外遥控
  40. }
  41.   
  42. void loop() {
  43.   if (irrecv.decode(&results)) {
  44.     //打印字符串
  45.     String codeString = getRremoteString(results.value);
  46.     if(codeString.length()!=0)
  47.       Serial.println(codeString);
  48.     irrecv.resume(); // 接收下一个值
  49.   }
  50. }

  51. /**
  52. * 解析红外编码并返回对应的字符串
  53. */
  54. String getRremoteString(unsigned long code){
  55.   String rremotestring = "";
  56.   int i = 0;
  57.   for(i = 0;i<MAX-1;i++){
  58.     if(code == rremote_code[i]){
  59.       break;  
  60.     }
  61.   }
  62.   //过滤掉长按
  63.   if(i==MAX-1) return "";
  64.   else return rremote_string[i];
  65. }
复制代码

      结果:
      
四、总结
      通过使用这个类库 我们可以解析到具体的键码,这样我们就可以基于这个去做一些我们想做的红外遥控功能(各位可以看看我写的蓝牙七彩灯帖子)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2016-12-29 23:51:02 | 显示全部楼层
楼主一如既往坐楼顶吹风
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 18:45 , Processed in 0.038230 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表