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

   家用电器如电视、机顶盒、空调等都可以通过红外遥控,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.mzph.cn/web/41307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LightGlue: Local Feature Matching at Light Speed【文献阅读】

论文&#xff1a;LightGlue: Local Feature Matching at Light Speed 代码&#xff1a;https://github.com/cvg/LightGlue 作者&#xff1a;1 ETH Zurich__2 Microsoft Mixed Reality & AI Lab Abstract 提出的LightGlue是一个深度神经网络用于学习图像间的局部特征匹配。…

back-end developer 后端开发的一些常识

通俗易懂版 1. 通信协议 1.1 RPC (Remote Procedure Call) 客观解释&#xff1a; RPC是一种协议&#xff0c;允许程序通过网络在不同的计算机上调用函数&#xff0c;就像调用本地函数一样。RPC隐藏了网络通信的复杂性&#xff0c;使得远程服务调用看起来像是本地调用。 现实…

WAIC | 上海人形机器人创新中心 | 最新演讲 | 详细整理

前言 笔者看了7月4号的人形机器人与具身智能发展论坛的直播&#xff0c;并在7月5日到了上海WAIC展会现场参观。这次大会的举办很有意义&#xff0c;听并看了各家的最新成果&#xff0c;拍了很多照片视频&#xff0c;部分演讲也录屏了在重复观看学习 稍后会相继整理创立穹彻智…

算法系列--分治排序|归并排序|逆序对的求解

一.基本概念与实现 归并排序(mergeSort)也是基于分治思想的一种排序方式,思路如下: 分解:根据中间下标mid将数组分解为两部分解决:不断执行上述分解过程,当分解到只有一个元素时,停止分解,此时就是有序的合并:合并两个有序的子区间,所有子区间合并的结果就是原问题的解 归并…

第一节 网络安全概述

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

C语言 指针和数组—指针数组及其在字符串处理中的应用

目录 问题的提出 问题的解决 回头看——指针、数组及其他类型的混合 指针数组与指向数组的指针 字符串的排序 问题的提出 问题的解决 回头看——指针、数组及其他类型的混合  基本数据类型  int 、 long 、 char 、 short 、 float 、 double……  数组是一种从…

os.makedirs

官方说明文档&#x1f517;&#xff1a;Link 解释下面的代码&#xff1a; os.makedirs(os.path.join(args.output_dir,sample_images), exist_okTrue)os.makedirs()&#xff1a;这是一个用于递归创建目录的Python函数。如果中间级目录&#xff08;目录链中的所有目录&#xff…

The IsA relationship and HasA relationship

Why you should worry about that? or not. Is-A (Inheritance) Represents an “is-a-kind-of” hierarchy between classes. A subclass (child class) inherits attributes and methods from its superclass (parent class). Subclasses can specialize or override inh…

设计模式之模版方法

模版方法介绍 模版方法&#xff08;Template Method&#xff09;模式是一种行为型设计模式&#xff0c;它定义了一个操作&#xff08;模板方法&#xff09;的基本组合与控制流程&#xff0c;将一些步骤&#xff08;抽象方法&#xff09;推迟到子类中&#xff0c;使得子类可以在…

旅游 | 西岳华山

得到了再失去&#xff0c; 总比从来没有得到更伤人。 ——胡赛尼《追风筝的人》 目录 旅游 | 西岳华山00 | 旅游导图01 | 旅游路线02 | 必带行李03 | 旅游费用3.1 门票3.2 索道价格3.2.1 北峰索道&#xff08;单程&#xff09;3.2.1 西峰索道&#xff08;单程&#xff09; 3.3 …

掌握 IPython 历史的艺术:%dhist 命令的深度指南

掌握 IPython 历史的艺术&#xff1a;%dhist 命令的深度指南 在 IPython 的交互式探索中&#xff0c;历史命令是我们最宝贵的资源之一。%dhist 命令是 IPython 提供的一个强大工具&#xff0c;它允许用户浏览、搜索和重新执行历史中的命令。本文将深入探讨 %dhist 命令的使用方…

【UE5.1】Chaos物理系统基础——03 炸开几何体集

目录 步骤 一、通过径向向量将几何体集炸开 二、优化炸开效果——让破裂的碎块自然下落 三、优化炸开效果——让碎块旋转起来 四、优化炸开效果——让碎块旋转的越来越慢 步骤 一、通过径向向量将几何体集炸开 1. 打开上一篇中&#xff08;【UE5.1】Chaos物理系统基础—…

Spring IOC基于XML和注解管理Bean

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

如何从 Windows 11/10/8.1/8/7 恢复已删除的视频

意外删除了视频或格式化了 SD 卡/硬盘&#xff1f;没有备份已删除的视频&#xff1f;别担心&#xff0c;我们有解决方案来恢复 Windows 11、10 中已删除的视频并处理这种糟糕的情况。 但在了解如何恢复已删除的视频和视频恢复应用程序之前&#xff0c;请知道 Windows 会为您提…

ARMv8寄存器详解

文章目录 一、ARMv8寄存器介绍二、通用寄存器三、 PSTAE寄存器四、特殊寄存器五、系统寄存器 一、ARMv8寄存器介绍 本文我来给大家介绍一下ARMv8的寄存器部分&#xff0c;ARMv8中有34个寄存器&#xff0c;包括31个通用寄存器、一个栈指针寄存器SP(X31),一个程序计数器寄存器PC…

Apache Drill 2万字面试题及参考答案

目录 什么是Apache Drill? Apache Drill的主要特点是什么? Apache Drill如何实现对复杂数据的查询? 描述Apache Drill的数据存储模型。 为什么Apache Drill被称为自服务的SQL查询引擎? Apache Drill支持哪些类型的数据源? 解释Apache Drill中的“schema discovery”…

Transformer前置知识:Seq2Seq模型

Seq2Seq model Seq2Seq&#xff08;Sequence to Sequence&#xff09;模型是一类用于将一个序列转换为另一个序列的深度学习模型&#xff0c;广泛应用于自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;如机器翻译、文本摘要、对话生成等。Seq2Seq模型由编码器&#…

《框架封装 · 统一异常处理和返回值包装》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

贪心算法-以高校科研管理系统为例

1.贪心算法介绍 1.算法思路 贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行&#xff0c;根据某个优化测度&#xff0c;每一 步都要确保能获得局部最优解。每一步只考虑一 个数据&#xff0c;其选取应该满足局部优化的条件。若下 一个数据和部分最优解连在一起…

JavaEE初阶-网络原理1

文章目录 前言一、UDP报头二、UDP校验和2.1 CRC2.2 md5 前言 学习一个网络协议&#xff0c;最主要就是学习的报文格式&#xff0c;对于UDP来说&#xff0c;应用层数据到达UDP之后&#xff0c;会给应用层数据报前面加上UDP报头。 UDP数据报UDP包头载荷 一、UDP报头 如上图UDP的…