饮水机开水前加入童锁判断
引言
饮水机加入童锁, 是配合红外线, 进行防误触检测. 我们模仿红外线检测杯子, 加入童锁变量, 这个变量是人工控制的, 开水前,检测一下童锁,如果童锁锁住 , 则不能开水, 我们只需要修改一下底层即可.
本博客修改完的代码工程:
https://wwyz.lanzoul.com/iKHks286941g
代码实操
1.定义童锁变量与结构体
#define lock_child 1 //童锁锁住
#define Unlock_child 0 //童锁解开
typedef struct
{
_Bool Status;
} Child_Info;
extern Child_Info child_lock_info;
![image-20240822231416074](https://img-blog.csdnimg.cn/img_convert/dd4452d3319c43da5daf7d66d3396afa.png)
2.定义童锁变量
我们就是在这里 , 可以初始化童锁, 测试是否可以在童锁锁住的时候开水
Child_Info child_lock_info = {1};
3.在out_water.h, 包含定义童锁与红外变量的文件
#include "infrared_cup.h"
4.在out_water.c里面, 出水函数里, 加入童锁判断, 如果锁住, 则不开水
child_lock_info.Status == Unlock_child
void OUT_water_Set(_Bool status)
{
if(status == out_water_ON && out_water_info.Status != out_water_ON &&
child_lock_info.Status == Unlock_child
)
{
GPIO_SetBits(GPIOA, GPIO_Pin_7);
out_water_info.Status = out_water_ON;
}
else
if(
(status == out_water_OFF && out_water_info.Status != out_water_OFF) ||
child_lock_info.Status == lock_child
)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_7);
out_water_info.Status = out_water_OFF;
}
}
调试方法
烧录工程, 然后触发 PA5处的按键或红外 , 我们通过修改初始化的童锁, 观看PA7处的小灯是否可以亮, 童锁加入底层, 进一步保证安全性. 后续我们联网调控童锁, 并且开关童锁的时候, 加入更多的 界面优化显示, 保证用户体验.