arduino红外遥控控制LED灯亮度 您所在的位置:网站首页 卧室遥控灯危害大吗视频教程 arduino红外遥控控制LED灯亮度

arduino红外遥控控制LED灯亮度

2024-07-17 10:29| 来源: 网络整理| 查看: 265

红外接收和红外发射

在这里插入图片描述 vcc接5v或者3.3v

红外接收头的接线

在这里插入图片描述

IRremote库安装

在这里插入图片描述 在这里插入图片描述 如果下面运行版本报错请下载第一点的版本比如2.x.x

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

在这里插入图片描述

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

这里我们用1 2 3三个按键设置小灯三个档位 在这里插入图片描述 小灯的正极要连接在支持PWM的端口 我们选择接在引脚5

/* 红外遥控,通过串口查看每个按钮对应的红外码, 同时每按一下控制LED灯的亮灭,通过亮灭变化也 能知晓是否每次按-发送-接收这个流程走完 */ #include //调用红外遥控对应的库 int RECV_PIN = 11;//定义红外接口引脚 /*利用库中的IRrecv函数创建一个红外线接收对象,用来接收红外线信号, * 对象名称为irrecv, * 括号中为用来接收红外信号的引脚*/ IRrecv irrecv(RECV_PIN);//创建一个红外线接收对象irrecv decode_results results;//声明一个IRremote库函数独有的变量类型(decode_results),results存放红外解码结果, int LEDa=5; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver启动红外解码 } void loop() { if (irrecv.decode(&results) ) {//核心!判断是否接收到红外码,若是,这个函数会返回true,并把红外解码的结果放在results里面 Serial.print("IRCode: "); Serial.println(results.value,HEX); switch(results.value){ case 0xFF30CF: //小灯亮度 analogWrite(LEDa,80); // break; case 0xFF18E7: analogWrite(LEDa,160); break; case 0xFF7A85: analogWrite(LEDa,255); break; } irrecv.resume(); // 在解码一个红外线信号之后,要运行resume()函数,这样才会持续接收下一组信号 } }

analogWrite(引脚号,0~255);数值越大小灯越亮具体原理自己搜索PWM



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有