查看: 4367|回复: 23

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

[复制链接]
  • TA的每日心情
    开心
    2019-1-23 08:59
  • 签到天数: 589 天

    [LV.9]以坛为家II

    发表于 2016-12-29 23:45 | 显示全部楼层 |阅读模式
    一、前言

          红外通信是一种利用红外光编码进行数据传输的无线通信方式,在目前来说是使用非常广泛的。生活中常见电视遥控器,空调遥控器,DVD遥控器(现在估计是老古董了),均使用红外线遥控。使用红外线遥控,主要有一体化红外接收头和红外遥控器。
          1.一体化红外接收头
          一体化接收头内部集成了红外接收电路。它可以接收红外信号并还原发射端的波形信号。通常使用的一体化接收头都是38KHz的红外信号。
          2.红外遥控器
          实验中采取以下遥控器
           }IS($W3IGQYTG@AOEKE]H4V.png
          每个按键都有各自的编码,按下按键后,就会发送对应编码的红外波。大多使用NEC编码。

          要想使用红外遥控功能,我们使用第三方红外遥控库-IRremote库.可以从github/Arduino-IRremote下载。
          下面介绍一下IRremote类库:
           1)IRrecv类  用于接收红外信号并对其解码。在使用前需要实例化一个该类对象。
                1.1 IRrecv(recvpin) 构造函数  recvpin为连接到接收头的引脚
                1.2 enableIRIn()初始化红外解码
                1.3 decode() 检查是否接收到编码
                1.4 resume() 接收下一个编码

           因为没有发射管,不讲解红外信号发送功能。

    二、实验内容
              1. 根据遥控器输入的红外信号,显示对应的符号
    三、实验过程
          代码:

    kittenblock中小学创客名师推荐的图形化编程软件

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


       结果:
    {D6NY9{XPC8U1U@3E]`2IF0.png
    四、总结
          通过使用这个类库 我们可以解析到具体的键码,这样我们就可以基于这个去做一些我们想做的红外遥控功能(各位可以看看我写的蓝牙七彩灯帖子)。
    打赏作者鼓励一下!
  • TA的每日心情
    开心
    2019-1-23 08:59
  • 签到天数: 589 天

    [LV.9]以坛为家II

     楼主| 发表于 2016-12-29 23:45 | 显示全部楼层
    楼主一如既往楼顶吹风
    打赏作者鼓励一下!
  • TA的每日心情
    开心
    2018-12-24 09:34
  • 签到天数: 146 天

    [LV.7]常住居民III

    发表于 2016-12-29 23:50 | 显示全部楼层
    不错,又长知识了。
  • TA的每日心情
    开心
    2019-1-23 08:59
  • 签到天数: 589 天

    [LV.9]以坛为家II

     楼主| 发表于 2016-12-30 08:02 | 显示全部楼层
    电磁波 发表于 2016-12-29 23:50
    不错,又长知识了。

    哈哈哈哈 很好
    打赏作者鼓励一下!
  • TA的每日心情
    开心
    2019-1-23 08:59
  • 签到天数: 589 天

    [LV.9]以坛为家II

     楼主| 发表于 2016-12-30 08:03 | 显示全部楼层

    哈哈哈  有用就好
    打赏作者鼓励一下!
  • TA的每日心情
    擦汗
    2017-2-15 13:03
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    发表于 2016-12-30 08:03 | 显示全部楼层
    涨知识            
    打赏作者鼓励一下!
  • TA的每日心情
    擦汗
    2017-8-16 16:44
  • 签到天数: 229 天

    [LV.7]常住居民III

    发表于 2016-12-30 09:08 | 显示全部楼层
    谢谢分享              
  • TA的每日心情
    无聊
    2016-10-25 09:11
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-12-30 09:14 | 显示全部楼层
    楼主,有没有什么简单又好玩的arduino可以做
  • TA的每日心情
    开心
    2019-1-23 08:59
  • 签到天数: 589 天

    [LV.9]以坛为家II

     楼主| 发表于 2016-12-30 09:22 | 显示全部楼层
    zhouyuzhe16 发表于 2016-12-30 09:14
    楼主,有没有什么简单又好玩的arduino可以做

    看看我写的蓝牙小车以及蓝牙rgb 那两个帖子
    打赏作者鼓励一下!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    【原创】制作一套USB电流采样板
    【原创】制作一套USB电流
    以前用 0.1Ω(R1J)曾经做过一个 USB 电流采集器,基本原理和 USB 电流表一致, 唯一
    arduino数字输出端低电平不稳定
    arduino数字输出端低电平
    我在做的功能: 用一个光电开关(买好的现成元件),发出高电平信号输入给arduino,然
    [Arduino物联网开发实战2]数据反馈
    [Arduino物联网开发实战2]
    [md]上一篇:(https://www.arduino.cn/thread-83177-1-1.html) ### 添加DIY组件
    博哥零基础教你玩转ESP8266(十四) ESP8266HTTPClient 连接世界
    博哥零基础教你玩转ESP826
    帖子导航帖 博哥零基础教你玩转ESP8266(一) 重识ESP8266 博哥零基础教你玩转ESP8266
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表