【Proteus仿真】【Arduino单片机】定时智能插座开关

2023-12-19


一、功能简介

本项目使用Proteus8仿真Arduino单片机控制器,使LCD1602液晶,DS18B20温度传感器、按键、蜂鸣器、继电器开关、HC05蓝牙模块等。
主要功能:
系统运行后,LCD1602显示温度、温度阈值,定时时间及状态信息等;如果温度高于阈值,则开关关闭,且蜂鸣器报警。
如果温度低于阈值,当定时器状态开启,定时结束,开关关闭,发出提示音。正常模式下,可通过K1键对开关的开和关控制。
通过K3键进入阈值设置模式,可通过K3选择需修改的数据位置,K1和K2调节,当需要开启定时器时,需将状态由N设置为Y,K4键确定并返回正常模式。可通过蓝牙发送字符’O’远程打开开关,发送字符’C’关闭。


二、软件设计

/*
作者:嗨小易(QQVIP群2:570487280)

*/



//系统数据显示
void sys_data_show(void)
{
	while(1)
	{
		//正常模式显示
		if(sys_ctrl.mode==0)
		{
			//温度显示
			lcd1602_show_nums(3,0,sys_ctrl.temp,2,0);
			//温度阈值显示
			lcd1602_show_nums(7,0,sys_ctrl.temph,2,0);
			//时间显示
			lcd1602_show_nums(5,1,sys_ctrl.time[0],2,0x80);
			lcd1602_show_nums(8,1,sys_ctrl.time[1],2,0x80);
			lcd1602_show_nums(11,1,sys_ctrl.time[2],2,0x80);
			
			//开关状态显示
			if(sys_ctrl.onoff==0)lcd1602_show_string(13,0,"OFF");
			else lcd1602_show_string(13,0," ON");
			//定时开关显示
			if(sys_ctrl.time_onoff==0)lcd1602_show_string(15,1,"N");
			else lcd1602_show_string(15,1,"Y");	
		}
		//设置模式显示
		else
		{
			//温度阈值显示
			lcd1602_show_nums(7,0,sys_ctrl.temph,2,0);
			//时间显示
			lcd1602_show_nums(5,1,sys_ctrl.time[0],2,0x80);
			lcd1602_show_nums(8,1,sys_ctrl.time[1],2,0x80);
			lcd1602_show_nums(11,1,sys_ctrl.time[2],2,0x80);
			switch(sys_ctrl.mode)
			{
				case 1://温度
					lcd1602_show_string(7,0,"  ");
					delay_ms(100);
					lcd1602_show_nums(7,0,sys_ctrl.temph,2,0);
					break;
				case 2://小时
					lcd1602_show_string(5,1,"  ");
					delay_ms(100);
					lcd1602_show_nums(5,1,sys_ctrl.time[0],2,0x80);
					break;
				case 3://分钟
					lcd1602_show_string(8,1,"  ");
					delay_ms(200);
					lcd1602_show_nums(8,1,sys_ctrl.time[1],2,0x80);
					break;
				case 4://开关
					lcd1602_show_string(15,1," ");
					delay_ms(200);
					if(sys_ctrl.time_onoff==0)lcd1602_show_string(15,1,"N");
					else lcd1602_show_string(15,1,"Y");
					break;	
			}	
		}	

		break;			
	}
}

//系统数据设置
void sys_data_set(void)
{
	u8 key=0;
	key=key_scan(0);
	//模式设置
	if(key==KEY3_PRESS)
	{
		sys_ctrl.mode++;
		if(sys_ctrl.mode>4)sys_ctrl.mode=1;
	}
	//正常模式
	if(sys_ctrl.mode==0)
	{
		//开
		if(key==KEY1_PRESS)
		{
			sys_ctrl.onoff=!sys_ctrl.onoff;	
		}
	}
	//设置模式
	else
	{
		//加
		if(key==KEY1_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://温度
					sys_ctrl.temph++;
					if(sys_ctrl.temph>99)sys_ctrl.temph=0;
					break;
				case 2://小时
					sys_ctrl.time[0]++;
					if(sys_ctrl.time[0]>23)sys_ctrl.time[0]=0;
					break;
				case 3://分钟
					sys_ctrl.time[1]++;
					if(sys_ctrl.time[1]>59)sys_ctrl.time[1]=0;
					break;
				case 4://开关
					sys_ctrl.time_onoff=!sys_ctrl.time_onoff;
					break;
			}
		}
		//减
		else if(key==KEY2_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://温度
					sys_ctrl.temph--;
					if(sys_ctrl.temph<0)sys_ctrl.temph=99;
					break;
				case 2://小时
					sys_ctrl.time[0]--;
					if(sys_ctrl.time[0]<0)sys_ctrl.time[0]=23;
					break;
				case 3://分钟
					sys_ctrl.time[1]--;
					if(sys_ctrl.time[1]<0)sys_ctrl.time[1]=59;
					break;
				case 4://开关
					sys_ctrl.time_onoff=!sys_ctrl.time_onoff;
					break;
			}
		}
		//确定
		else if(key==KEY4_PRESS)
		{
			sys_ctrl.mode=0;
		}
	}
}




三、实验现象

B站演示视频: https://space.bilibili.com/444388619
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系作者

视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Proteus仿真】【Arduino单片机】定时智能插座开关 的相关文章

  • 在 mongodb shell 中打印文档值

    我想在 mongo shell 中打印此 JSON 文档的值 就像简单的控制台输出一样 无需创建新的集合或文档 提前致谢 我找到了一个解决方案 通过使用 forEach 应用 JavaScript 方法 db widget find id
  • 如何提高 MongoDB 中 update() 和 save() 的性能?

    我正在寻找有关如何在以下情况下提高数据库性能的提示 作为示例应用程序 我今天编写了一个相当简单的应用程序 它使用 Twitter 流 API 来搜索某些关键字 然后将结果存储在 MongoDB 中 该应用程序是用 Node js 编写的 我
  • Sails.js 升级到 v1 反向区分大小写查询

    升级到 sails v1 后 控制器中的所有请求都变得区分大小写 尽管这是预料之中的 但在这里评论道 https sailsjs com documentation concepts models and orm models case s
  • 将 $lookup 结果合并到现有数组

    我是 mongo 新手 我需要你的帮助 我有收藏学习计划 这是示例文档 id dGFY garranti typ sk garant en Chairman of study board id 1025769 typ sk predseda
  • Mongoose MongoDB:更新嵌套数组中的对象

    我有以下架构 var UserSchema new Schema emp no Number skills skill type Schema Types ObjectId ref Skill startDate type Date 然后我
  • Azure DocumentDB 本地模拟器是否支持 mongodb 协议?

    Azure DocumentDB 本地模拟器是否支持类似于 Azure 托管 DocumentDB 中可用的 MongoDB 协议的 mongodb 协议 我没有看到启动本地模拟器时指定协议的方法 是的 Azure DocumentDB 模
  • 如何最高效地更新MongoDB中的大量文档?

    我想要最有效地更新大量 gt 100 000 文档 我的第一个天真的方法是在 JS 级别上进行 编写脚本 首先获取 ids 然后循环 ids 并通过 id 调用更新 完整 文档或 set 补丁 我遇到了内存问题 还将数据分成了最大块 500
  • mongodb 备份是自动进行的吗?

    我们使用两个 mongodb 服务 现在 swisscom 开发者控制台中有一个备份按钮 我们是否必须使用此按钮手动进行备份 还是自动进行进一步备份 如果是 何时以及多久一次 我们会自动进行备份 但仅用于灾难恢复 我们不向客户提供此备份 所
  • Mongodb 中的读自己写的一致性

    首先 这是Pymongo 文档 http api mongodb org python current examples requests html highlight read 20you 20own 20write 默认情况下 当线程首
  • 操作 `posts.find()` 缓冲在 10000 毫秒后超时

    当我在本地尝试时 效果非常好 但 Heroku 在服务器部署后出现此错误 有人可以帮忙吗 message Operation posts find buffering timed out after 10000ms index js con
  • 将图像文件存储在猫鼬模式的二进制数据中并以html形式显示图像

    我正在使用 Express Node js 和 Mongodb 创建上传和显示图像文件的网页 我使用 schema 将图像的二进制文件保存在 mongodb 中 这是我在index js和db js中的一点代码 var Post mongo
  • 更新 Meteor 中的嵌套数组

    这是我的架构 id FJwSEMdDriddXLKXh name t number 5 owners id 1 name Name address Address type Type gender Gender notes 单击后 我将在所
  • mongodb 查询 DBRef 类型

    如何在 mongodb shell 中将此查询转换为有效的 mongodb 查询 cars owner ref users cars owner这里是一个 DBRef 但是 ref是无效的 我收到此错误 err Positional ope
  • MongoDB 使用 $sort、$skip 和 $limit 返回错误的行

    这是我正在使用的功能 MyModel aggregate match query sort createdAt 1 skip skip limit 10 allowDiskUse true query是过滤行 skip是基于分页的动态值 即
  • 如何使用 MongoDB 实现 ASP.NET Core 3.1 Identity?

    是一个 API 用于简化后端和逻辑代码来管理用户 密码 个人资料数据 角色 声明 令牌 电子邮件确认等 对于 Visual Studio 来说 支撑脚手架 https learn microsoft com en us aspnet cor
  • MongoDB 如何使用 $date 运算符进行查询?

    编辑 上下文 我正在使用 Talend ETL 工具 并在查询中使用 ISODate 或 Date 或 new Date 如下所示失败并出现错误 因此我需要解决方法 dt ISODate 2014 01 01 dt Date 2014 01
  • 将字符串数组转换为对象 Id 数组

    我有一个字符串数组 let stringObjectIdArray fssdlfsd343 43434234242 342424242 我想使用 mongoose 类型将字符串数组更改为对象 Id 数组 但它不起作用 它仅适用于字符串而不是
  • mocha——手表和猫鼬模型

    如果我让 mocha 监视更改 每次保存文件时 mongoose 都会抛出以下错误 OverwriteModelError 无法覆盖Client模型一旦编译 我知道猫鼬不允许两次定义模型 但我不知道如何让它与mocha watch clie
  • 使用mongoid动态创建索引

    我有一项为我的文档创建新字段的工作 我想在这项工作结束时创建该字段的索引 我试过 Model index field gt 1 and also Mongoid Sessions default rating prediction ensu
  • i18Next - NodeJS - 如何在不重新加载服务器的情况下更改翻译

    我正在使用 NodeJS 的 i18next 包来启用翻译 我将它作为标准 并为每个语言 国家对使用一个 json 文件 我想构建一个管理页面来编辑翻译 而无需深入研究代码 那么 如何 重新加载 管理员编辑过的 json 文件 而无需重新启

随机推荐

  • 得帆信息创始人-张桐,受邀出席 BV百度风投AIGC主题论坛

    近日 得帆信息创始人兼CEO张桐 作为百度风投被投代表企业创始人受邀出席 向未来 共成长 BV百度风投AIGC主题论坛 与包括上海市徐汇区相关部门领导 百度集团相关事业部负责人及代表 以及来自国寿资本 中网投 麦顿投资的投资人 BV百度风投
  • Typora+Picgo(正常) 却上传图片失败问题解决思路和办法

    报错信息 在typora中粘贴图片时报错 显示上传图片失败 有点奇怪 而我确定我的picgo正常且通过了测试 那我们就去看日志 跟踪排查问题在哪里 我的picgo日志文件路径在 D user username Application Dat
  • Vue中英文翻译小结

    背景 时局艰难 后端开发被强制写了vue 这不有个需求是中英文翻译 特此记录下 该怎么个翻译法子 先引入全局的路由国际化文件 zh js 和 en js 1 关于插值表达Button里面 t reinsop common back 2 关于
  • onvif协议笔记

    一 简介 ONVIF官网 ONVIF协议网络摄像机 IPC 客户端程序开发 1 专栏开篇 onvif协议开发 二 gSOAP gsoap官网 1 下载和编译 下载地址 bin sh 指定源码目录 解压源码 GSOAP SRC gsoap 2
  • nacos启动 java.net.UnknownHostException: jmenv.tbsite.net

    只做记录 地址在这 windows 双击执行startup cmd文件 默认是以集群方式启动nacos 由于只想用单体的并没有配置集群相关的属性 所以无法启动 解决方式1 在命令行输入startup m standalone以单机模式启动就
  • 冬日路亚,寒冬中的收获【钓鱼博客】12.17日

    12月17日 南京 桦树钓场 晴 气温 零下4度到0度 虽屋外寒风刺骨 但钓鱼佬实在是压不住心里想钓鱼的冲动 我还是出发了 才抛几竿 出线孔和鱼竿导线孔结冰 以上阿尔法渔轮的导线规由于线上有水导致结冰冻上了 中鱼出线视频 轮子咔咔出线 渔获
  • 黑马程序员《PHP基础案例教程》第2版课后练习—第03章

    第3章课后练习 答案均参考教材官方发布的PPT 以下是下载PPT的页面 人民邮电出版社教育社区 PHP基础案例教程 第2版 图书 人邮教育社区 一 填空题 1 定义函数使用的关键字为 function 2 用于对字符串中的某些字符进行替换操
  • 密码学上的经典瞬间:如果当时有Python

    提到 安全 首先想到的一定是加密 在如今的互联网环境中 信息加密无处不在 我们早已习惯 甚至毫无感觉 比如 通过https协议访问的各个网站的内容 QQ 微信等聊天工具之间互相发送的信息等等 都是经过加密处理的 前几天看了一篇介绍密码学历史
  • Linux CentOS7安装harbor

    1 下载harbor离线包 wget https github com goharbor harbor releases download v2 4 2 harbor offline installer v2 4 2 tgz 2 解压安装
  • Fortinet在“IDC MarketScape: 中国软件定义广域网基础设施2023年厂商”评估中位居“领导者”类别

    近日 IDC MarketScape 中国软件定义广域网基础设施2023年厂商评估 正式发布 该报告通过 IDC MarketScape 厂商评估模型对中国SD WAN基础设施厂商进行了评估 Fortinet 在该报告中位居 领导者 类别
  • 常见的6种软件测试用例设计方法

    常见的软件测试用例设计方法 个人认为主要是下面这6种 流程图法 也叫场景法 等价类划分法 边界值分析 判定表 正交法 错误推测法 这6种常见方法中 我分别按照定义 应用场景 使用步骤 案例讲解这4个部分进行讲解 所以本文行文结构如下 每种用
  • 【正式服部署】安装Nginx

    正式服部署 安装Nginx 千寻简笔记介绍 千寻简文库已开源 Gitee与GitHub搜索 chihiro doc 包含笔记源文件 md 以及PDF版本方便阅读 文库采用精美主题 阅读体验更佳 如果文章对你有帮助请帮我点一个 Star 更新
  • 系列十一、索引

    一 索引 1 1 概述 索引 index 是帮助 MySQL 高效获取数据的有序数据结构 在数据之外 数据库系统还维护着满足特定查找算法的数据结构 这些数据结构以某种方式引用 指向 数据 这样就可以在这些数据结构上实现高级查找算法 这种数据
  • 智慧养老:创新科技让老年生活更美好

    智慧养老 创新科技让老年生活更美好 随着人口老龄化的加剧 智慧养老成为了关注焦点 智慧养老以创新科技为核心 旨在改善老年人的生活品质 促进健康 增强安全感和社会融入感 本文将详细介绍智慧养老的关键技术和应用场景 带您了解智慧养老的发展趋势和
  • UI 易用性测试 以及自动化实现!

    GUI 是指图形用户界面 UI 是指用户界面 对于纯软件系统 这两者没有本质的区别 GUI易用性测试与 UI 易用性测试内容一致 但是如果测试的对象是一个产品 这两者则存在区别 对于产品 UI 则不仅仅包括 GUI 还包括产品硬件部分的测试
  • 华为认证 | 专科考HCIE有用吗?

    当然可以 HCIE认证 对考生的学历 专业等没有任何要求 考生可以直接进行考试的报名 考试报名可以通过Pearson VUE官网 或者是直接前往考试中心所在地 向工作人员直接申请考试报名 01 专科考HCIE真的很有用吗 华为认证被越来越多
  • JAVA四大权限修饰符

    1 四大权限修饰符 public private default protected是java的四大修饰符 下面分别主要介绍四者之间的区别 1 1 public 公共的 public是权限最大的修饰符 他可以修饰类 成员变量 成员方法 构造
  • 通过全流量分析Web业务性能好坏

    随着全球商业环境的不断发展和变化 业务性能的重要性愈发凸显 无论是传统实体企业还是纯线上企业 业务性能都是其核心竞争力和稳定运营的关键要素 良好的业务性能不仅可以提升客户满意度 增加市场份额 还可以降低成本 提高效率 本文章目的为探讨基于B
  • 不做数据采集,不碰行业应用,专注数字孪生PaaS平台,飞渡科技三轮融资成功秘诀

    12月15日 飞渡科技在北京举行2023年度投资人媒体见面会 全面分享其产品技术理念与融资之路 北京大兴经开区党委书记 管委会主任常学智 大兴经开区副总经理梁萌 北京和聚百川投资管理有限公司 以下简称 和聚百川 投资总监严玉婷 北京天穆私募
  • 【Proteus仿真】【Arduino单片机】定时智能插座开关

    文章目录 一 功能简介 二 软件设计 三 实验现象 联系作者 一 功能简介 本项目使用Proteus8仿真Arduino单片机控制器 使LCD1602液晶 DS18B20温度传感器 按键 蜂鸣器 继电器开关 HC05蓝牙模块等 主要功能 系