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

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

引言

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

我们使用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

  • 22
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值