Arduino基础入门之九 红外遥控

news/2025/2/22 18:04:32/

一 硬件

     这套元件是红外接收头(左)和红外遥控器(右),遥控器按一下,红外接收头接收到并让UNO执行相应的操作。卖家给的资料里面依然是不给力地没有标清楚接收头三个引脚具体接法,我只能反复试,和以前不同,将红外接收头接入UNO,如果接错了,上传代码后UNO会灭灯,完全不能工作,试错了几次得到如上图的结果,VCC对应5V ,OUT则对应一个数字引脚,只是不知换一种接头是不是还要试错?

   

二 代码

1.初试红外遥控,功能:通过串口查看红外遥控器按钮对应的红外码,代码如下

/* 红外遥控,通过串口查看每个按钮对应的红外码,
同时每按一下控制LED灯的亮灭,通过亮灭变化也
能知晓是否每次按-发送-接收这个流程走完*/#include <IRremote.h>//调用红外遥控对应的库int RECV_PIN = 11;//定义红外接口引脚
int ledpin = 10;//定义LED接口引脚
boolean ledstate = LOW;
/*利用库中的IRrecv函数创建一个红外线接收对象,用来接收红外线信号,* 对象名称为irrecv,* 括号中为用来接收红外信号的引脚*/
IRrecv irrecv(RECV_PIN);//创建一个红外线接收对象irrecv
decode_results results;//声明一个IRremote库函数独有的变量类型(decode_results),results存放红外解码结果,void setup()
{pinMode(ledpin, OUTPUT);Serial.begin(9600);irrecv.enableIRIn(); // Start the receiver启动红外解码
}void loop() {if (irrecv.decode(&results)) {//核心!判断是否接收到红外码,若是,这个函数会返回true,并把红外解码的结果放在results里面Serial.print("bits: ");         Serial.println(results.bits);}    //  红外线码元位数Serial.print("IRCode: "); Serial.println(results.value,HEX);/*串口监视器查看红外解码结果(HEX十六进制)results.value 是unsigned long型,头文件有介绍*/ledstate = !ledstate;digitalWrite(ledpin,ledstate);irrecv.resume(); // 在解码一个红外线信号之后,要运行resume()函数,这样才会持续接收下一组信号}}

知识点:(1)重点是红外遥控库<IRremote.h>里面相关的函数,参看上面代码注释。

(2)加了一个LED灯,目的在代码最前面的注释里也讲了,就是通过LED的亮灭变化直接知晓是否我按的这个动作已被接收到了。直接通过串口查看的话,每个按钮对应的码就可以一一查看,也能发现异常。

    异常有两种:一种是有时候按了并没有反应,估计是没有发送过去(也可能是没接受到),另一种是按了一下,但灯快速明灭,最终状态不变,这是因为按下后发送了两次码,一个是按钮对应码,另一个是随后出现的FFFFFFFF,且这个问题的出现是随机的,有几个按钮比较容易出现(CH+,NEXT等),关于这个问题,搜到文章【1】中提到,出现FFFFFFFF这种情况“可能是按键码之后出现的重复码,可以通过判断语句if(results.value!= (-1))去掉”,可惜我试了一下没有成功,不过因为连续接收到两个码(发出两个码?),导致灯状态变化两次,所以看起来不变。

2. 通过上面的代码,可以得出每一个按钮对应红外解码(十六进制)的列表,下面代码实现用串口显示所按遥控器按钮名称的功能。

功能:按下按键,串口显示对应按键名称,代码如下:

//红外遥控,串口显示所按的遥控器按钮的名称#include <IRremote.h>
int RECV_PIN = 11;//定义红外接口引脚
/*利用库中的IRrecv函数创建一个红外线接收对象,用来接收红外线信号,* 对象名称为irrecv,* 括号中为用来接收红外信号的引脚*/
IRrecv irrecv(RECV_PIN);//创建一个红外线接收对象irrecv
decode_results results;//声明一个IRremote库函数独有的变量类型(decode_results),results存放红外解码结果,
void IRdisplay(unsigned long value){//传过来的results.value 是unsigned long型switch(value){case 0xFFA25D:Serial.println("CH-");break;case 0xFF629D:Serial.println("CH");break;case 0xFFE21D:Serial.println("CH+");break;case 0xFF22DD:Serial.println("PREV");break;case 0xFF02FD:Serial.println("NEXT");break;case 0XFFC23D: Serial.println("PLAY/PAUSE");break;case 0xFFE01F:Serial.println("-");break;case 0xFFA857:Serial.println("+");break;case 0xFF906F:Serial.println("EQ");break;case 0xFF6897:Serial.println("0");break;case 0xFF9867:Serial.println("FOL-");break;case 0xFFB04F:Serial.println("FOL+");break;case 0xFF30CF:Serial.println("1");break;case 0xFF18E7:Serial.println("2");break;case 0xFF7A85:Serial.println("3");break;case 0xFF10EF:Serial.println("4");break;case 0xFF38C7:Serial.println("5");break;case 0xFF5AA5:Serial.println("6");break;case 0xFF42BD:Serial.println("7");break;case 0xFF4AB5:Serial.println("8");break;case 0xFF52AD:Serial.println("9");break;}}
void setup()
{Serial.begin(9600);irrecv.enableIRIn(); // Start the receiver
}void loop() {if (irrecv.decode(&results)) {判断是否接收到红外码,并把红外解码的结果放在results里面IRdisplay(results.value);//调用IRdisplay函数irrecv.resume(); // 等待接收下一组信号}}

    按钮和生成码的对应表已经列在代码中了,而且在这个代码里面,FFFFFFFF这个错误也能被筛选掉。

【1】Arduino红外解码程序,利用自带的函数库 - Arduino - 极客工坊 - Powered by Discuz!


http://www.ppmy.cn/news/208555.html

相关文章

红外遥控功能的实现

喜欢请关注微信公众号:嵌入式从0到1 公众号内容面向在校大学生、电子爱好者、嵌入式工程师; 涉及电子制作、模块使用、单片机技术、物联网相关知识分享; 软硬件全栈工程师,玩模块,学硬件,带你从0走到1 文章目录 涉及知识点一体化红外接收头VS1838B简介应用场景编码标准…

STM32F103C8T6红外遥控解码

目录 一、红外遥控 二、输入捕获初始化 捕获两个上升沿或者下降沿得到他们之间一个周期为1US的的波计次数来得到时间 三、NEC解码 四、IC.h函数 红外按键 五、主函数 六、总结 推荐STM32学习课程&#xff1a; [6-5] TIM输入捕获_哔哩哔哩_bilibili[6-5] TIM输入捕获是S…

Arduino简单实例之七_红外遥控接收

1) 说明&#xff1a; 红外接收模块适用于红外线遥控和红外线数据传输。对于不同的遥控器&#xff0c;区别只是接到的数字不同。 注意要买三脚的红外接收头&#xff0c;而不是直接购买红外对管。当然也可以买电子积木的红外接收模块&#xff0c;它还多了一块小板和小灯&a…

OpenMMLab-AI实战营第二期——3.基于RTMPose的耳朵穴位关键点检测(Colab+MMPose)

文章目录 1. Colab和Google云端硬盘1.1 建立项目文件和jupyter文件1.2 Colab运行时选择1.3 关联Colab中的文件和Google云端硬盘的文件 2. Colab和MMPose2.1 环境配置2.2 配置文件修改 3. Colab相关知识 1. Colab和Google云端硬盘 参考&#xff1a; 利用Colab上的TPU训练Keras…

C语言遥控器程序,红外遥控

红外遥控器的发送装置和接收装置以及关于载波等一些原理大家可参看《手把手教你学51单片机》文档第16章知识内容&#xff0c;这里笔者只简单说明如何运用该模块并讲解代码的实现。 1.接收装置 HS0038这个元器件是用来接收红外遥控器发送来的信号做处理的&#xff0c;我们知道红…

单片机红外线遥控

项目简介&#xff1a; (TC9012)红外遥控器发送红外信号, 红外接收模块接收到信号后,通过外部中断0传送给(51)单片机; 单片机对接收到的每帧数据解码后将相应的按键值显示在LCD1602上; 并实现对相应外设的控制:0-开buzzer, 1-关buzzer; 2-开LED, 3-关LED。 TC9012遥控器相关参数…

我谈学习型红外遥控(一)

跟着项目组长一起做了几个空鼠项目&#xff0c;一直觉得自己长劲不大&#xff0c;因为自己只负责简单的键盘定义部分&#xff0c;最终的整个软件架构其实自己都不太了解。从去年11月份开始&#xff0c;一直都很忙&#xff0c;一个接着一个做&#xff0c;我的任务也只是键盘部分…

arduino笔记20:红外遥控

红外LED 红外接收器 红外遥控的通讯协议 用到一个库&#xff1a; arduino红外接收器&#xff1a; IRrecvDemo 。 decode()库函数用于判断红外接收器所接收到的红外信号是否可以被解析。 如可以成功解析&#xff0c;则返回非零数值。并将解析结果存储于results中。…