目录

STM32-笔记24-智能开关垃圾桶盖

一、模块及接线

二,项目目的

以下几个事件触发时,自动开盖,并伴随蜂鸣器短响一声,同时 LED 灯闪烁一下,2秒后自动关盖:

  • 检测到有人靠近
  • 检测到有震动
  • 按下按键 KEY1

实验框图如下:

三、项目前期准备

复制项目文件夹19-串口打印功能,重命名为26-智能感应开关垃圾桶盖项目

打开项目文件

加载文件

main.c

cpp 复制代码
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "uart1.h"
#include "beep.h"
#include "sg90.h"
#include "exti.h"
#include "hcsr04.h"
#include "key.h"
#define OPEN 1
#define CLOSE 0

uint8_t dustbin_status = CLOSE;

void open_dustbin(void)//开盖
    {
        if(dustbin_status == CLOSE)//当垃圾桶盖的状态为关盖的时候,执行下面的代码
        {
            sg90_angle_set(180);//开盖度数
            beep_ON();
            led1_ON();
            delay_ms(100);
            beep_OFF();
            led1_OFF();
            dustbin_status = OPEN;//将垃圾痛盖的状态改为开盖
        }
    }
void close_dustbin(void)//关盖
    {
        sg90_angle_set(0);
        beep_OFF();
        led1_OFF();
        dustbin_status = CLOSE;//垃圾桶盖的状态为关盖
    }

int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
    led_init();//初始化led灯
    uart1_init(115200);
    beep_init();
    key_init();
    exti_init();
    sg90_init();
    hcsr04_init();
    
    uint8_t key_num = 0;
    while(1)
    { 
        key_num = key_scan();
        
        if(key_num == 1 || vibrate_flag_get() == TRUE || hcsr04_get_lenght() < 10)
        {
            open_dustbin();
            delay_ms(2000);
            vibrate_flag_set(FALSE);
        }
        else
        {
            close_dustbin();
        }
        delay_ms(10);
    }
}

在代码中出现的bug

1、问题:当手一直放在超声波前面的时候,每隔2秒蜂鸣器会响一下

原因:因为在有物品挡在超声波前面的时候,垃圾桶盖就会开盖,开盖两秒,蜂鸣器响一声,然后就会继续进入if语句判断,由于物品孩还在超声波前面,所以垃圾桶盖依旧会开盖两面,蜂鸣器再次响一声,如此循环

解决办法:

定义一个垃圾桶盖开关状态位

初始化状态位为关盖状态,当有物品挡在超声波前面的时候,调用开盖函数,在开盖函数中判断状态位是否是CLOSE状态,如果是,则执行开盖函数,否则不执行,此时这里状态位是CLOSE所以,执行开盖函数,并且把状态位置为OPEN,在下次执行if语句的时候,如果满足if里的条件,则会调用开盖函数,但是由于状态位为OPEN,所以此时不会执行开盖函数中的代码。

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
JM丫1 小时前
python基础
笔记·python
啥都想学的又啥都不会的研究生4 小时前
Redis设计与实现-数据持久化
java·数据库·redis·笔记·缓存·面试
youyoufenglai5 小时前
【vue3学习笔记】(第144-146节)reactive函数;回顾vue2响应式原理;vue3响应式原理_proxy
笔记·学习
灏瀚星空6 小时前
Python JSON模块详解:从入门到高级应用
开发语言·经验分享·笔记·python·json
l1x1n08 小时前
HTB 学习笔记 【中/英】《前端 vs. 后端》P3
前端·笔记·学习
学工科的皮皮志^_^9 小时前
单片机ADC+NTC温度采集电路学习
经验分享·笔记·单片机·嵌入式硬件·学习
Small踢倒coffee_氕氘氚9 小时前
《HTML视觉大框架:构建现代网页设计的基石》
经验分享·笔记
时间之城9 小时前
笔记:记一次使用RabbitMq的x-delayed-message延迟消息插件,出现消息立即消费,延迟时间后再次消费,引发的重复消费问题
spring boot·笔记·spring·rabbitmq
斯密码赛我是美女9 小时前
响应(Response)
笔记·安全
繁缕怀夕11 小时前
【QT笔记---QText】
开发语言·笔记·qt