红外遥控风扇——arduino

红外遥控风扇——arduino

  • 本节课任务
  • 红外遥控
  • 红外遥控通信过程
  • 红外遥控套件
  • 红外遥控接线
  • 实现风扇的多种换挡方式
  • 用本节课所学的红外遥控,控制RGB彩灯变换颜色,至少配置4种

本节课任务

1、了解红外遥控技术在生活中的运用。
2、学会编程测试红外遥控器的键值。
3、制作多种换挡方式的换挡风扇。

红外遥控

组成:红外遥控器+红外接收器
基本原理:红外遥控的发射电路是采用红外发光二极管来发出经过调制的红外光波;红外接收电路由红外接收二极管、三极管或硅光电池组成,它们将红外发射器发射的红外光转换为相应的电信号。
红外遥控是目前使用最广泛的一种通信和遥控手段。具有体积小、功耗低、功能强、成本低等特点。

红外遥控通信过程

在这里插入图片描述

红外遥控套件

红外接受器
在这里插入图片描述
接收器引脚定义:
在这里插入图片描述

红外遥控器
在这里插入图片描述

红外遥控接线

在这里插入图片描述

实现风扇的多种换挡方式

在红外遥控换挡风扇的基础上,再增加一种按键换挡方式,实现
即可红外遥控换挡,也可以按键换挡。

// 包含必要的红外遥控接收头库 IRremote.h
#include <IRremote.h>// 定义三个布尔型变量anjian0, anjian1, anjian2用于存储输入端口的状态
volatile boolean anjian0 = LOW; // 3号引脚状态
volatile boolean anjian1 = LOW; // 4号引脚状态
volatile boolean anjian2 = LOW; // 5号引脚状态// 初始化红外接收模块,接收数据连接到串口2,并启用接收功能
IRrecv irrecv_2(2); // 对应硬件的红外接收模块通道
decode_results results_2; // 存储解码结果// 设置程序的初始化函数
void setup() {// 将输入引脚3、4、5设置为输入模式pinMode(3, INPUT);pinMode(4, INPUT);pinMode(5, INPUT);// 开启红外接收模块的工作irrecv_2.enableIRIn();
}// 主循环函数,持续监听并处理红外信号
void loop() {// 更新anjian0、anjian1、anjian2的状态anjian0 = digitalRead(3);anjian1 = digitalRead(4);anjian2 = digitalRead(5);// 当检测到红外信号时,解码并获取数据值if (irrecv_2.decode(&results_2)) {// 获取解码后的值并将其转换成字符串,然后识别其对应类型的名称ir_item = results_2.value;String type = "UNKNOWN";String typelist[] = {"UNKNOWN", "NEC", "SONY", "RC5", "RC6", "DISH", "SHARP", "PANASONIC", "JVC", "SANYO", "MITSUBISHI", "SAMSUNG", "LG", "WHYNTER"};if (results_2.decode_type >= 1 && results_2.decode_type <= 13) {type = typelist[results_2.decode_type];}// 打印接收到的红外类型及相应的动作,如调整模拟输出的亮度Serial.println("IR TYPE: " + type + "  ");// 根据特定的红外编码值,控制模拟输出9的电压(0-127或0-VCC)if (ir_item == "0xFF9867") {analogWrite(9, 0);}if (ir_item == "0xFFA25D") {analogWrite(9, 127);}if (ir_item == "0xFF629D") {analogWrite(9, 255);}// 恢复接收,继续监听新的红外指令irrecv_2.resume();} else {// 如果未接收到红外信号,则根据anjian0, anjian1, anjian2的状态调整模拟输出if (anjian0 == HIGH) {analogWrite(9, 0);}if (anjian1 == HIGH) {analogWrite(9, 127);}if (anjian2 == HIGH) {analogWrite(9, 255);}}
}

用本节课所学的红外遥控,控制RGB彩灯变换颜色,至少配置4种

颜色。

```c++
// 包含IRremote库,用于红外信号处理
#include <IRremote.h>// 定义一个长整型变量,存储接收到的红外码值
long ir_item;// 创建IR接收模块实例,连接到第2个串口(通常GPIO 2)
IRrecv irrecv_2(2);
decode_results results_2; // 函数setup() 初始化 IR 接收模块,开启接收模式
void setup() {irrecv_2.enableIRIn(); // 启动IR接收,并等待数据
}// 主循环函数loop()
void loop() {// 检查是否有新的红外信号解码成功if (irrecv_2.decode(&results_2)) {// 获取并保存解码后的红外码值ir_item = results_2.value;// 将接收到的红外码对应的类型转换为字符串,存储在变量type中String type = "UNKNOWN"; String typelist[] = {"UNKNOWN", "NEC", "SONY", "RC5", "RC6", "DISH", "SHARP", "PANASONIC", "JVC", "SANYO", "MITSUBISHI", "SAMSUNG", "LG", "WHYNTER"};if (results_2.decode_type >= 1 && results_2.decode_type <= 13) { // 检查是否在预定义的类型列表内type = typelist[results_2.decode_type]; // 如果在,则赋值对应类型名}// 打印接收到的红外类型和值Serial.print("IR TYPE: " + type + "  ");// 根据特定的红外码值控制LED状态,这里仅示例四个条件if (ir_item == "0xFF9867") {analogWrite(9, 255); // LED9亮起analogWrite(10, 0);   // LED10关闭analogWrite(11, 0);   // LED11关闭}if (ir_item == "0xFFA25D") {analogWrite(9, 0);   // LED9关闭analogWrite(10, 255); // LED10亮起analogWrite(11, 0);   // LED11关闭}if (ir_item == "0xFF629D") {analogWrite(9, 0);   // LED9关闭analogWrite(10, 0);   // LED10关闭analogWrite(11, 255); // LED11亮起}if (ir_item == "0xFFE21D") {analogWrite(9, 255); // LED9亮起analogWrite(10, 255); // LED10亮起analogWrite(11, 0);   // LED11关闭}// 继续监听红外信号irrecv_2.resume();} else {// 如果没有新信号,暂停接收}
}

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

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

相关文章

WPF-实现多语言的静态(需重启)与动态切换(不用重启)

一、多语言切换&#xff08;需重启&#xff09; 1、配置文件添加Key <appSettings><add key"language" value"zh-CN"/></appSettings> 2、新增附加属性当前选择语言 public CultureInfo SelectLanguage{get > (CultureInfo)GetValu…

C#初级——List 容器

容器 在C#中&#xff0c;容器通常指的是用于存储和组织数据的集合类。 本文介绍的容器是动态数组&#xff1a;List<T> 内部使用数组来存储元素&#xff0c;当添加元素超出当前数组容量时&#xff0c;会自动调整大小&#xff08;扩容&#xff09;。 list容器 List<&g…

用数组表达双链表

大体思想跟单链表相同&#xff0c;只不过双链表每个节点有两个指向&#xff1a; 单链表只能指向一个节点(下一个节点) 而双链表可以指向两个节点(上下两个节点) 代码分析 1、定义 在这里没有定义head&#xff0c;直接让0号点是head&#xff0c;下标为1的点是最右边的 //e[i…

Spring Boot 中使用 JSON Schema 来校验复杂JSON数据

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 在应用程序接口&#xff08;API&#xff09;的开发中&#xff0c;JSON作为一种数据交换格式被广泛利用。然而&#xff0c;对数据的结构和规则进行标准化是至关重要的&#xff0c;这正是JSON Schema发挥…

模拟一次XFS故障,分析原因并进行修复

模拟一次XFS故障 在平常处理问题时经常会遇到文件系统损坏的问题&#xff0c;有时候是日志里面出现了报错但文件系统还是可以读写&#xff0c;有时候是文件系统已经无法读写了 分析下不同现象的原因和一些可能出现的情况。 通过直接修改块存储损坏文件系统 1、制作一个xfs文…

Android图像显示SurfaceFlinger总结

1 介绍 1.1 框架中位置 ​​ 上图为Android的图形显示系统框架图。 首先上层应用通过ViewRoot的scheduleTraversals函数发起绘制任务&#xff0c;并通过HWUI调用OpenGL接口将绘制数据传递给GPU处理&#xff1b;SF会接收所有应用更新的绘制数据&#xff0c;并根据Z-Order、透明…

计算机网络(网络层)

网络层概述 网络层是干什么的&#xff1f; 网络层的主要任务是实现不同异构网络互连&#xff0c;进而实现数据包在各网络之间的传输相比于数据链路层的以太网通信&#xff0c;网络层则是将一个个数据链路层连接的以太网通过路由器连接起来。从而实现不同数据链路层的互联。 这…

​【香菇带你学Mysql】Mysql超长执行sql定位和优化【建议收藏】

本文为MySQL数据库管理员和开发人员提供了一套全面的超时SQL定位和优化解决方案。通过合理运用这些方法和技巧&#xff0c;可以显著提升MySQL数据库的性能和稳定性&#xff0c;减少超时SQL语句的发生&#xff0c;确保数据库的高效运行。 0. 引言 最近某个Mysql数据库频繁告警…

登录页滑块验证图

效果图 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> <b…

【Kubernetes】k8s集群中pod的容器资源限制和三种探针

目录 一.关于pod容器的资源限制 1.资源限制的单位 1.1.CPU 资源单位 1.2.内存 资源单位 二.关于QOS服务质量&#xff08;pod的调度和驱逐有限制&#xff09; 1.QoS服务质量分类 2.驱逐顺序 三.关于pod容器的三种探针 1.探针的三种规则 2.Probe支持三种检查方法 3.探…

docker安装及使用

一、docker优点及作用 优点&#xff1a; 基础镜像MB级别创建简单隔离性强启动速度秒级移植与分享放便 作用&#xff1a;资源隔离 cpu、memory资源隔离与限制访问设备隔离与限制网络隔离与限制用户、用户组隔离限制 二、docker安装 2.1.配置yum源 yum install -y yum-uti…

Mysql开启SSL

等二测出未开启SSL,如下 have_openssl、have_ssl都是DISABLED也不知道当时为啥没开&#xff0c;看最近的都是开启的,整改必去得开了&#xff0c;开启步骤 1.生成秘钥 进入mysql的bin目录下&#xff0c;运行 ./mysql_ssl_rsa_setup运行后会生成证书 默认证书会在mysql的data…

主从备份(复制)

一、备份的三种类型 备份的三种主要类型包括热备份、逻辑备份和物理备份&#xff0c;每种备份类型都有其特定的应用场景和优缺点。 1. 热备份 定义&#xff1a; 热备份是在数据库或系统处于正常运行状态下进行的备份。这种备份方式允许在不停机的情况下对数据库或系统数据进…

【Python】Django Web 框架

一、常用的Web开发框架 1.Django Django是一个由Python写成的开放源代码的Web应用框架。这套框架的主要目标是使开发复杂、数据库驱动的网站变得简单。Django注重组件的重用性和“可拔插性”、敏捷开发和DRY(Dont Repeat Yourself)法则 2.Flask Flask是一个微型的Python开发…

反序列化靶机实战serial(保姆级教程)

一.信息收集 靶机地址下载&#xff1a;https://download.vulnhub.com/serial/serial.zip 打开靶机&#xff0c;在kali虚拟机中进行主机存活探测 可以知道靶机ip地址为192.168.133.171 然后扫描端口 可以发现有一个22端口跟80端口 然后接下来用kali扫描它的目录 可以发现有一…

Django-Oscar开发独立站/外贸商城教程与问题记录

​特别说明&#xff1a; 本博客为个人开发Django-Oscar时的经验总结&#xff0c;方便后期维护&#xff01;&#xff08;第一次这么认真的记录这种大型项目&#xff0c;打个广告吧&#xff1a;本人可接单算法程序开发&#xff0c;包含深度学习和图像相关……等相关&#xff09;…

Unity补完计划 之 音效

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 首先&#xff0c;音频这块组件较少&#xff0c;但是内容很重要&#xff0c;因为对于任何一款非特殊面向人群的游戏来说&a…

STM32入门三(开漏输出点亮外接的LED)

前面2章用的是推免输出&#xff0c; 推免输出: 输出端由两个晶体管构成&#xff1a;一个N沟道晶体管和一个P沟道晶体管。这两个晶体管一般不会同时导通&#xff0c;避免短路; 白话&#xff0c;就是输入高还是低&#xff0c;由你的GPIO 控制&#xff08;GPIO 输出高就高&#xf…

【LeetCode 1991 找到数组的中间位置 / LeetCode 724 寻找数组的中心下标】中间索引问题

1991 题目描述 暴力解法1&#xff1a; 思路&#xff1a; 遍历下标&#xff0c;求出左边和和右边和比较两边是否相等相等直接返回值没有符合的返回 -1 class Solution {public int findMiddleIndex(int[] nums) {int lennums.length;//初始化一个变量 midIndex 为 -1&#xff…

C# Unity 面向对象补全计划 七大原则 之 接口隔离原则 (ISP) 难度:☆ 总结:大接口分成小的,然后该干啥干啥

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识&#xff0c;看不懂没关系 请看专栏&#xff1a;http://t.csdnimg.cn/mIitr&#xff0c;查漏补缺 1.接口隔离原则 (ISP) 这…