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

一、模块及接线

 二,项目目的

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

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

实验框图如下:

三、项目前期准备

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

打开项目文件

加载文件

main.c

#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 0uint8_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,所以此时不会执行开盖函数中的代码。

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

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

相关文章

从零开始开发纯血鸿蒙应用之UI封装

从零开始开发纯血鸿蒙应用 一、题引二、UI 组成三、UI 封装原则四、实现 lib_comps1、封装 UI 样式1.1、attributeModifier 属性1.2、自定义AttributeModifier<T>类 2、封装 UI 组件 五、总结 一、题引 在开始正文前&#xff0c;为了大家能够从本篇博文中&#xff0c;汲…

使用ArcGIS Pro自带的Notebook计算多个遥感指数

在之前的分享中&#xff0c;我们介绍了如何使用ArcPy将GEE下载的遥感影像转为单波段文件。基于前面创建的单波段文件&#xff0c;我们可以一次性计算多种遥感指数&#xff0c;例如NDVI、EVI、NDSI等。我这里直接在ArcGIS Pro中自带的Notebook进行的运行。如下图所示&#xff0c…

超大规模分类(一):噪声对比估计(Noise Contrastive Estimation, NCE)

NCE损失对应的论文为《A fast and simple algorithm for training neural probabilistic language models》&#xff0c;发表于2012年的ICML会议。 背景 在2012年&#xff0c;语言模型一般采用n-gram的方法&#xff0c;统计单词/上下文间的共现关系&#xff0c;比神经概率语言…

Python 实现 冒泡排序算法示例

冒泡排序算法示例 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法。它重复地遍历要排序的列表&#xff0c;比较相邻的元素&#xff0c;并交换它们的位置&#xff0c;如果它们的顺序错误。这个过程会重复进行&#xff0c;直到没有需要交换的元素为止&#x…

275-增强型多功能数据采集卡PCIe-6251-EX

产品特点&#xff1a; 高速高精度数据采集&#xff0c;16bit10MSPS&#xff0c;32路单端/16路差分高速高精度任意波形发生&#xff0c;14bit165MHz&#xff0c;2路完全独立完全可编程的I/O端口&#xff0c;33个完全可编程的量程选择&#xff0c;0~5V/0~10V/5V/10VPCIe通信接口…

Llama 3 后训练(三)

目录 4. 后训练 4.1 建模 图表解读 4.1.1 聊天对话格式 4.1.2 奖励建模 4.1.3 监督微调&#xff08;Supervised Finetuning&#xff09; 4.1.4 直接偏好优化&#xff08;Direct Preference Optimization&#xff09; 4.1.5 模型平均&#xff08;Model Averaging&#x…

机器人C++开源库The Robotics Library (RL)使用手册(四)

建立自己的机器人3D模型和运动学模型 这里以国产机器人天机TR8为例,使用最普遍的DH运动学模型,结合RL所需的描述文件,进行生成。 最终,需要的有两个文件,一个是.wrl三维模型描述文件;一个是.xml运动学模型描述文件。 1、通过STEP/STP三维文件生成wrl三维文件 机器人的…

聚类的主要算法和介绍

聚类是一种无监督学习算法&#xff0c;用于将数据集划分为多个组&#xff08;或簇&#xff09;&#xff0c;使得同一簇内的数据点更相似&#xff0c;不同簇之间的点差异更大。以下是主要的聚类算法及其特点、应用场景和局限性&#xff1a; 1. K-Means 聚类 特点&#xff1a; …

uniapp3 手写签名组件(vue3 语法)封装与应用

本文介绍了基于 uniapp3&#xff08;vue3 语法&#xff09;封装的手写签名组件。 包括父组件的调用方式&#xff0c;如通过条件判断展示签名图片或点击进入签名页面&#xff0c;以及接收签名照片的逻辑。子组件涵盖了自定义导航栏、清除、取消、确认等操作按钮&#xff0c;利用…

Go+chromedp实现Web UI自动化测试

1.为什么使用go进行UI自动化测试&#xff1f; 速度&#xff1a;Go速度很快&#xff0c;这在运行包含数百个UI测试的测试套件时是一个巨大的优势 并发性&#xff1a;可以利用Go的内置并发性(goroutines)来并行化测试执行 简单&#xff1a;Go的简约语法允许您编写可读且可维护…

【LLM综述】29种大模型Prompt Engineering技术

note 从零样本&#xff08;Zero-shot&#xff09;提示到最新进展的各种提示技术&#xff0c;包括推理和逻辑链&#xff08;Chain-of-Thought, CoT&#xff09;提示、自动链式思考&#xff08;Auto-CoT&#xff09;提示、自我一致性&#xff08;Self-Consistency&#xff09;提…

基于SpringBoot的实验室信息管理系统【源码+文档+部署讲解】

系统介绍 视频演示 基于SpringBootVue实现的实验室信息管理系统采用前后端分离的架构方式&#xff0c;系统分为管理员、老师、用户三种角色&#xff0c;实现了用户管理、设备管理、实验室查询、公告、课程、实验室耗材管理、我的等功能 技术选型 开发工具&#xff1a;idea2…

arcgis模版空库怎么用(一)

这里以某个项目的数据为例&#xff1a; 可以看到&#xff0c;属性表中全部只有列标题&#xff0c;无数据内容 可能有些人会认为空库是用来往里面加入信息的&#xff0c;其实不是&#xff0c;正确的用法如下&#xff1a; 一、下图是我演示用的数据&#xff0c;我们可以看到其中…

基于Spring Boot + Vue3实现的在线汽车保养维修预约管理系统源码+文档

前言 基于Spring Boot Vue3实现的在线汽车保养维修预约管理系统是一种前后端分离架构的应用&#xff0c;它结合了Java后端开发框架Spring Boot和现代JavaScript前端框架Vue.js 3.0的优势。这样的系统可以为汽车服务站提供一个高效的平台来管理客户的预约请求 技术选型 系统…

2024年总结

2024年是努力打破思维边界的一年&#xff0c;为了突破自己&#xff0c;努力阅读更多的书籍&#xff0c;变换更多的角度思考问题&#xff1b; 努力的写博客&#xff0c;写文字&#xff0c;总结自己的思想&#xff1b; 不断的实践&#xff0c;克制自己的思维和行动的惯性&#…

论文研读:Text2Video-Zero 无需微调,仅改动<文生图模型>推理函数实现文生视频(Arxiv 2023-03-23)

论文名&#xff1a;Text2Video-Zero: Text-to-Image Diffusion Models are Zero-Shot Video Generators 1. 摘要 1.1 方法总结 通过潜空间插值, 实现动作连续帧。 以第一帧为锚定&#xff0c;替换原模型的self-attention&#xff0c;改为cross-attention 实现 保证图片整体场…

python 归并排序(Merge Sort)

归并排序&#xff08;Merge Sort&#xff09; 归并排序是一种高效的排序算法&#xff0c;采用分治法&#xff08;Divide and Conquer&#xff09;策略。它的基本思想是&#xff1a;将数组递归地分成两半&#xff0c;分别对两半进行排序&#xff0c;然后将排序后的两半合并成一…

AI安全的挑战:如何让人工智能变得更加可信

引言 随着人工智能&#xff08;AI&#xff09;技术在各个领域的广泛应用&#xff0c;尤其是在医疗、金融、自动驾驶和智能制造等行业&#xff0c;AI正在重塑我们的工作和生活方式。从提高生产效率到实现个性化服务&#xff0c;AI带来了前所未有的便利。然而&#xff0c;在享受这…

去除el-tabs 下面的灰色横线,并修改每一项的左右间距,和字体颜色

HTML <el-tabs v-model"activeName" class"demo-tabs" tab-click"handleClick"><el-tab-pane label"全部" :name"null"></el-tab-pane><el-tab-pane label"问答陪练" name"general-t…

C++算法20例

1、求两个数的最大公约数 int gcd(int a, int b) { 2 return b 0 ? a : gcd(b, a % b); 3} 2、判断素数 bool isPrime(int n) {if (n < 1) return false; for (int i 2; i * i < n; i) {if (n % i 0) return false;}return true; } 3、冒泡排序 void bubbleSort…