红外遥控:智能学习红外遥控编码

   家用电器如电视、机顶盒、空调等都可以通过红外遥控,Rainbow专为物联网、家居智能而设计的硬件,自然在红外遥控收发方面有很好的支持。

    红外遥控通常是由红外发光二极管发射一定频率的载波,通过载波携带的控制信息,经过调制的信号被接收器接收后再进行解码,根据所接收到的编码再去执行响应的操作,如:切换电视频道、调整空调温度等。家用电器能够接收的基本上都是用38K的载波进行调制后的红外信号,而HX1838则是专门对38K载波进行接收处理的专用模块,Rainbow进行红外接收的时候,需要先在红外接收插口中插入HX1838接收模块。

    Rainbow开发包能够很方便实现对红外遥控信号的接收处理,形成原始的数据,这些数据可以进一步解码或者不用解码,而是通过红外发光二极管发射出去控制家电等。将红外遥控信号记录下来,并能够将记录下来的信号通过红外发光二极管发射出去控制电器,这就是万能学习型红外遥控的基本实现原理,Rainbow开发包提供了红外遥控编码接收和发射函数,同时Rainbow具有网络模块,可以在这个基础上开发出通过手机、网页等实现遥控家电的万能遥控设备。

   在软件包的“Projects\IR-Recv”文件夹包含了本文的完整工程,可以直接编译、烧写和调试。这个程序主要展示如何在Rainbow中进行红外遥控原始编码接收,看看main.cpp的代码:
#include "WProgram.h"
#include "IRRemote.h"

int main()
{
   //Rainbow初始化
   boardInit();
   //默认串口初始化
   Serial.begin();
   Serial.println("IR-Recv start...");

   //创建红外遥控接收实例,HX1838接到TIM4的CH1,即:PB6
   IRRecv irRecv;
   irRecv.enableIRIn();
   while(1)
   {
      uint16_t* rawBuf;
      int16_t len = irRecv.available();
      //判断红外采集是否完成
      if(len > 0)
      {
         //取红外采集的原始编码
         rawBuf = irRecv.getRawCode();
         //将接收到的红外原始编码通过默认串口输出
         Serial.print("Frame Length:");
         Serial.print(len);
         Serial.println();
         for(uint16_t i=0; i < len; i++)
         {
            Serial.print(rawBuf[i]);
            if(i != len - 1)
            {
               Serial.print(",");
            }
         }
         Serial.println();
         //准备取下一个红外遥控编码
         irRecv.resume();
      }
   }
}

    在Rainbow中进行红外遥控编码接收的流程:
    1、首先需要#include "IRRemote.h",
    2、定义红外遥控接收对象IRRecv irRecv;
    3、开始进行红外遥控接收irRecv.enableIRIn();
    4、如果接收到红外遥控编码的话,irRecv.available()返回原始的红外遥控编码的长度,返回值大于0
    5、通过irRecv.getRawCode()可以提取到原始的红外遥控编码数组,数组长度是irRecv.available()
    6、对红外遥控原始编码处理完毕后,需要调用irRecv.resume(),以便进行下一次红外遥控编码获取

    上面的程序编译无误后,将程序烧写到Rainbow中,并将HX1838红外接收模块插入到Rainbow中专为HX1838设计的接口中,然后在电脑上运行串口调试工具并和Rainbow连接成功,取一个家用电器的遥控器对准红外接收模块,在遥控器上按下一个按键,此时在串口调试工具中会将该按键的原始红外遥控编码的长度和内容显示出来。

    接下来我们说说红外遥控原始编码的含义。从串口调试工具中输出的原始编码是类似这样一串字符:
  4486,4428,590,1604,590,534,563,1605,591,1603,592,533,563,535,563,1604,591,535,563,534,564,1606,589,
534,563,535,563,1604,590,1603,592,535,563,1604,591,1607,588,535,563,1605,590,1607,588,1604,591,
1632,564,1602,593,1605,591,534,563,1602,593,534,563,534,563,534,563,535,563,534,563,534,563,1604,
591,534,563,1632,563,534,564,1604,590,1605,590,534,563,534,564,534,563,1605,591,533,563,1604,591,
535,563,534,563,1605,590,1604,592,5263,4512,4427,592,1602,593,534,563,1602,593,1632,563,535,563,
534,563,1605,590,535,564,533,563,1607,589,534,563,534,563,1604,592,1602,593,534,563,1604,591,1630,
564,534,563,1631,564,1604,591,1604,592,1603,592,1604,591,1633,563,534,563,1604,592,534,563,535,563,
510,587,534,563,534,564,510,587,1630,565,510,587,1631,564,511,586,1603,592,1604,591,511,587,511,
587,509,588,1605,590,510,587,1603,593,510,587,511,587,1603,592,1604,591

    这其实上面的字符串就是打开美的空调,并将温度设置到28度、制热的红外遥控原始编码,它是由一系列16位的整数构成的,到底是些什么意义呢?

    前面我们说到了红外遥控发射是通过一定频率的载波对红外编码进行调制后通过红外发光二极管发射出去的,说起“调制”这个词有些抽象,我们可以理解为在指定的时间内发送载波与不发送载波,载波就是一个产生一定频率的波形发生器,只要一通电就通过一条电线向红外发光二极管输送信号,让红外发光二极管按照这个频率的波形发光(发送),而调制过程就好比我们有一个电子开关,开关打开的时候,波形发生器就通电,驱动红外发光二极管发光,开关关闭的时候波形发生器就关闭,红外发光二极管就不发光。

    说到这里,前面那一段原始红外遥控编码就好解释了,首先这些数字是表示时间的,单位是us,他们就是表示电子开光打开和关闭的时间,即调制过程。这些数字中,奇数的数字表示电子开关打开的时间,即发送38K载波的时间,偶数的数字表示关闭发送载波的时间。以美的空调开机那个编码的前几个数字4486,4428,590,1604为例:表示发送38K载波4486us,然后停止发送载波4428us, 再发送590us的载波,然后再停止发送1604us载波,以此类推。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/780562.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

15集终于编译成功了-了个球!编译TFLite Micro语音识别工程-《MCU嵌入式AI开发笔记》

15集终于编译成功了-个球&#xff01;编译TFLite Micro语音识别工程-《MCU嵌入式AI开发笔记》 还是参考这个官方文档&#xff1a; https://codelabs.developers.google.cn/codelabs/sparkfun-tensorflow#2 全是干货&#xff01; 这里面提到的这个Micro工程已经移开了&#xff1…

第一节 网络安全概述

一.网络空间安全 网络空间&#xff1a;一个由信息基础设施组成相互依赖的网络。 ---- 海陆空天&#xff08;大海、陆 地、天空、航天&#xff09; 通信保密阶段 ---- 计算机安全 ----- 信息系统安全 ----- 网络空间安全 计算机安全&#xff1a;开始秉持着“严于律己&#x…

数据结构速成--图

由于是速成专题&#xff0c;因此内容不会十分全面&#xff0c;只会涵盖考试重点&#xff0c;各学校课程要求不同 &#xff0c;大家可以按照考纲复习&#xff0c;不全面的内容&#xff0c;可以看一下小编主页数据结构初阶的内容&#xff0c;找到对应专题详细学习一下。 目录 …

设计模式之状态机模式

一、状态机模式介绍 状态机模式&#xff08;State Machine Pattern&#xff09;是一种用于描述对象行为的软件设计模式&#xff0c;属于行为型设计模式。在状态机模式中&#xff0c;对象的行为取决于其内部状态&#xff0c;并且在不同的状态下&#xff0c;对象可能会有不同的行…

增强安全防护,解读智慧校园系统的登录日志功能

在构建智慧校园系统时&#xff0c;登录日志功能扮演着不可或缺的角色&#xff0c;它不仅是系统安全的守护者&#xff0c;也是提升管理效率和确保合规性的有力工具。这一机制详细记录每次登录尝试的方方面面&#xff0c;涵盖了时间戳、用户身份、登录来源的IP地址乃至使用的设备…

第2集《修习止观坐禅法要》

请打开补充讲表第一面&#xff0c;附表一、念佛摄心方便法。 我们前面讲到修止&#xff0c;就是善取所缘境的相貌&#xff0c;然后心于所缘&#xff0c;专一安住&#xff1b;心于所缘&#xff0c;相续安住&#xff1b;达到心一境性的目的。 站在修学净土的角度&#xff0c;他…

Ubuntu 20.04下多版本CUDA的安装与切换 超详细教程

目录 前言一、安装 CUDA1.找到所需版本对应命令2.下载 .run 文件3.安装 CUDA4.配置环境变量4.1 写入环境变量4.2 软连接 5.验证安装 二、安装 cudnn1.下载 cudnn2.解压文件3.替换文件4.验证安装 三、切换 CUDA 版本1.切换版本2.检查版本 前言 当我们复现代码时&#xff0c;总会…

如何监控和分析 PostgreSQL 中的查询执行计划?

文章目录 一、为什么监控和分析查询执行计划很重要二、PostgreSQL 中用于获取查询执行计划的方法三、理解查询执行计划的关键元素四、通过示例分析查询执行计划五、优化查询执行计划的常见策略六、使用工具辅助分析七、结合实际案例的详细分析八、总结 在 PostgreSQL 数据库中&…

STM32基础篇:引脚 × 复用 × 重映射

特殊引脚与普通引脚 特殊引脚 特殊功能引脚&#xff1a;"迫于生活压力"被特化的引脚&#xff0c;即为了满足芯片运行的基本条件。 以STM32F103C8T6型号为例&#xff0c;其特殊功能引脚&#xff08;11个&#xff09;(VddVss)*3多组供电接口VDDAVSSA(A表示Analog&…

Spring IOC基于XML和注解管理Bean

IoC 是 Inversion of Control 的简写&#xff0c;译为“ 控制反转 ”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出 松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Java 对象…

前端使用Threejs加载机械臂并控制机械臂跳舞

1. 前言 在我的第一篇博客中,大致讲解了如何使用threejs导入机械臂模型,以及如何让机械臂模型动起来的案例,可以看一下之前的博客前端使用Threejs控制机械臂模型运动 本篇博客主要讲解的是在原来的基础上添加GSAP动画库的应用,可以通过动画,来让机械臂进行指定轨迹位姿的运动…

Java 使用sql查询mongodb

在现代应用开发中&#xff0c;关系型数据库和NoSQL数据库各有千秋。MongoDB作为一种流行的NoSQL数据库&#xff0c;以其灵活的文档模型和强大的扩展能力&#xff0c;受到广泛欢迎。然而&#xff0c;有时开发者可能更熟悉SQL查询语法&#xff0c;或者需要在现有系统中复用SQL查询…

STM32——Modbus协议

一、Modbus协议简介&#xff1a; 1.modbus介绍&#xff1a; Modbus是一种串行通信协议&#xff0c;是Modicon公司&#xff08;现在的施耐德电气 Schneider Electric&#xff09;于1979年为使用可编程逻辑控制器&#xff08;PLC&#xff09;通信而发表。Modbus已经成为工业领域…

代码随想录训练第十一天|二叉树基础理论、二叉树递归遍历、二叉树迭代遍历、二叉树统一迭代法、LeetCode102.二叉树层序遍历

文章目录 二叉树理论基础二叉树种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树 二叉树存储方式二叉树遍历方式二叉树的定义总结 二叉树的递归遍历思路前序遍历后序遍历中序遍历 二叉树的迭代遍历思路前序遍历&#xff08;迭代法&#xff09;中序遍历&#xff08;迭代法&#…

STM32-Unix时间戳和BKP备份寄存器以及RTC实时时钟

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. Unix时间戳1.1 Unix时间戳简介1.2 UTC/GMT1.3 时间戳转换 2. BKP备份寄存器2.1 BKP简介2.2 BKP基本结构2.3 BKP库函数 3. RTC实时时钟3.1 RTC简介3.2 RTC框图3.3 RTC基本结构3.4 硬件电路3.5 RTC操作注意事项3.6 R…

elementui中日期/时间的禁用处理,使用传值的方式

项目中,经常会用到 在一个学年或者一个学期或者某一个时间段需要做的某件事情,则我们需要在创建这个事件的时候,需要设置一定的时间周期,那这个时间周期就需要给一定的限制处理,避免用户的误操作,优化用户体验 如下:需求为,在选择学年后,学期的设置需要在学年中,且结束时间大…

C#反射基本应用

1、反射 反射是.NET Framework的一个特性&#xff0c;它允许在运行时获取类型的信息以及动态创建对象&#xff0c;调用方法&#xff0c;以及访问字段和属性。 2、代码 using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy…

快速搭建发卡独立站(完全免费)

本文介绍如何使用开源项目&#xff0c;零成本&#xff0c;无需服务器的方式搭建一套自己的数字商品/发卡独立站&#xff0c;不需要任何开发能力&#xff0c;即便是小白用户也能搭建。 感兴趣可直接查看开源项目地址&#x1f449; https://github.com/iDataRiver/theme-basic …

【全面介绍下如何使用Zoom视频会议软件!】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

C语言_数据的存储

数据类型介绍 1. 整形家族 //字符存储的时候&#xff0c;存储的是ASCII值&#xff0c;是整型 //char 默认是unsigned char还是signed char标准没有规定&#xff0c;其他类型都默认是signed char&#xff0c;unsigned char&#xff0c;signed char short&#xff0c;unsigned s…