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

news2024/10/6 2:45:28

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

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

相关文章

【每日一练】python三目运算符的用法

""" 三目运算符与基础运算的对比 """ a 1 b 2#1.基础if运算判断写法&#xff1a; if a > b:print("基础判断输出&#xff1a;a大于b") else:print("基础判断输出&#xff1a; a不大于b")#2.三目运算法判断&#xff1a;…

【云原生】Prometheus监控Docker指标并接入Grafana

目录 一、前言 二、docker监控概述 2.1 docker常用监控指标 2.2 docker常用监控工具 三、CAdvisor概述 3.1 CAdvisor是什么 3.2 CAdvisor功能特点 3.3 CAdvisor使用场景 四、CAdvisor对接Prometheus与Grafana 4.1 环境准备 4.2 docker部署CAdvisor 4.2.2 docker部署…

flask使用定时任务flask_apscheduler(APScheduler)

Flask-APScheduler描述: Flask-APScheduler 是一个 Flask 扩展&#xff0c;增加了对 APScheduler 的支持。 APScheduler 有三个内置的调度系统可供您使用&#xff1a; Cron 式调度&#xff08;可选开始/结束时间&#xff09; 基于间隔的执行&#xff08;以偶数间隔运行作业…

洛谷 P3613 学习用map代替大大大数组的好题

题目链接&#xff1a;P3613 【深基15.例2】寄包柜 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目截图&#xff1a; 题意分析&#xff1a; 非常简单的存入和取出操作 唯一的 “难点” 在于 数组开不到 a[100007][100007]&#xff0c;会暴内存 非常巧妙的引入 map 来解决…

Square Root SAM论文原理

文章目录 Square Root SAM论文原理核心原理SLAM问题的3种表示贝叶斯网络因子图&#xff08;Factor graph&#xff09;马尔科夫随机场(Markov Random Field, MRF) SLAM最小二乘问题&线性化因式分解 factorization矩阵与图(Matrices ⇔ Graphs)因式分解&变量消元(Factori…

深入理解 Kata Containers

目录 引言Kata Containers 的定义Kata Containers 的架构Kata Containers 的工作原理Kata Containers 的应用场景Kata Containers 在 CentOS 上的常见命令实验场景模拟总结 1. 引言 随着云计算和容器技术的迅猛发展&#xff0c;安全性和性能成为了用户关注的焦点。传统容器技…

STM32CubeMX实现4X5矩阵按键(HAL库实现)

为了实现计算器键盘&#xff0c;需要使用4X5矩阵按键&#xff0c;因此&#xff0c;我在4X4矩阵键盘上重新设计了一个4X5矩阵按键。原理图如下&#xff1a; 原理描述&#xff1a; 4X5矩阵按键&#xff0c;可以设置4个引脚为输出&#xff0c;5个引脚为输入模式&#xff0c;4个引…

如何屏蔽搜索结果特定网站?无限添加指定域名屏蔽解决方案

如何通过Chrome插件屏蔽某网站的搜索结果 在使用搜索引擎时&#xff0c;有时我们会希望屏蔽掉某些不想看到的网站。那么&#xff0c;我们可以通过安装油猴&#xff08;Tampermonkey&#xff09;插件&#xff0c;并使用特定脚本来实现这个目的。由于Chrome网上应用店可能无法打…

数据结构之“队列”(全方位认识)

&#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;数据结构 前言 上期博客介绍了” 栈 “这个数据结构&#xff0c;他具有先进后出的特点。本期介绍“ 队列 ”这个数据结构&#xff0c;他具有先进先出的特点。 目录…

ASCII码对照表【2024年汇总】

&#x1f37a;ASCII相关文章汇总如下&#x1f37a;&#xff1a; &#x1f388;ASCII码对照表&#xff08;255个ascii字符汇总&#xff09;&#x1f388;&#x1f388;ASCII码对照表&#xff08;Unicode 字符集列表&#xff09;&#x1f388;&#x1f388;ASCII码对照表&#x…

Linux内核链表使用方法

简介&#xff1a; 链表是linux内核中最简单&#xff0c;同时也是应用最广泛的数据结构。内核中定义的是双向链表。 linux的链表不是将用户数据保存在链表节点中&#xff0c;而是将链表节点保存在用户数据中。linux的链表节点只有2个指针(pre和next)&#xff0c;这样的话&#x…

中国星坤连接器:定制化服务,精准选型!

在当今快速发展的电子行业中&#xff0c;连接器作为电子设备中不可或缺的组成部分&#xff0c;其性能和品质直接影响到整个系统的性能表现。中国星坤连接器以其卓越的产品选型系统和质量保证&#xff0c;为全球客户提供了一站式的解决方案。 精准选型&#xff0c;快速定位 中国…

模板进阶:非类型模板参数,类模板特化,模板的编译分离

1. 非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常…

【python】python母婴数据分析模型预测可视化(数据集+论文+PPT+源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

vue-cli 脚手架详细介绍

4 vue-cli 脚手架 1 脚手架介绍 vue-cli也叫vue脚手架,vue-cli是vue官方提供的一个全局命令工具&#xff0c;这个命令可以帮助我们快速的创建一个vue项目的基础架子。 脚手架&#xff1a;搭建好的一个架子&#xff0c;我们在架子上进行开发 开箱即用零配置基于webpack、webpac…

13 学习总结:指针 · 其一

目录 一、内存和地址 &#xff08;一&#xff09;内存 &#xff08;二&#xff09;内存单元 &#xff08;三&#xff09;地址 &#xff08;四&#xff09;拓展&#xff1a;CPU与内存的联系 二、指针变量和地址 &#xff08;一&#xff09;创建变量的本质 &#xff08;二…

【MySQL】逻辑架构与存储引擎

一、逻辑架构 1、MySQL逻辑架构 我们可以根据上图来对sql的执行过程进行分析 第一步&#xff1a;客户端与服务器建立一个连接&#xff0c;从连接池中分配一个线程处理SQL语句第二步&#xff1a;SQL接口接受SQL指令第三步&#xff1a;如果是5.7版本&#xff0c;就会先去缓存中…

SpringMVC(2)——controller方法参数与html表单对应

controller方法参数与html表单对应 0. User实体类 import org.springframework.format.annotation.DateTimeFormat;import java.io.Serializable; import java.util.Date; import java.util.List; import java.util.Map;public class User implements Serializable {private …

期末考试结束,老师该如何私发成绩?

随着期末考试的落幕&#xff0c;校园里又恢复了往日的宁静。然而&#xff0c;对于老师们来说&#xff0c;这并不意味着工作的结束&#xff0c;相反&#xff0c;一系列繁琐的任务才刚刚开始。 成绩单的发放&#xff0c;就是其中一项让人头疼的工作。家长们焦急地等待着孩子的考试…

【全面讲解如何安装Jupyter Notebook!】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…