STM32——06-STM32电动车报警器

news2024/11/15 23:56:41

项目需求
点击遥控器 A 按键,系统进入警戒模式,一旦检测到震动(小偷偷车),则喇叭发出声响报警,
吓退小偷。
点击遥控器 B 按键,系统退出警戒模式,再怎么摇晃系统都不会报警,否则系统一直发出尖叫,
让车主尴尬。

项目框图
硬件清单
振动传感器
继电器
高功率喇叭
433M 无线接收发射模块
杜邦线
振动传感器介绍及实战

振动传感器介绍

单片机供电 VCC GND 接单片机

产品不震动,输出高电平,模块上的 DO 口 产品震动,输出低电平,绿色指示灯亮

AO 口不用

振动传感器编程实现 

如果直接在中断服务函数里调用 HAL_Delay 函数,则会造成系统卡死。
原因:程序初始化时 默认把滴答定时器的中断优先级设为最低 ,其它中断源很容易打断它导致卡
死。
解决:在 main 函数里使用以下函数提高滴答定时器的中断优先级(提升至 0 ):

HAL_NVIC_SetPriority(SysTick_IRQn,0,0);

 并且将 EXTI4 的中断优先级设置比滴答定时器的中断优先级高,比如 2 。

b. 继电器介绍及实战
继电器工作原理
单片机供电 VCC GND 接单片机, VCC 需要接 3.3V 5V 不行!
最大负载电路交流 250V/10A ,直流 30V/10A
引脚 IN 接收到低电平时,开关闭合

 

编程实现
c. 433M 无线发射接收模块介绍及实战
433M 无线发射接收模块介绍
单片机供电 VCC GND 接单片机
接收到信号,接收模块对应针脚输出高电平
D0 D1 D2 D3,对应遥控器的ABCD
编程实现
需求:按下遥控器 A 按键, LED1 1 秒;按下遥控器 B 按键, LED2 1 秒。
D0 -- PA5
D1 -- PA6
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	
	switch(GPIO_Pin)
	{
		case GPIO_PIN_5:
			//如果检测到PA5被拉高(按键A被按下)
			if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5) == GPIO_PIN_SET)
			{
				//则将PB8拉低,LED1亮1秒
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
				HAL_Delay(1000);
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
			}
			else
			{
				//如果未检测到PA5,则关闭LED1
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
			}
			break;
		
		case GPIO_PIN_6:
			//如果检测到PA6被拉高(按键B被按下)
			if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6) == GPIO_PIN_SET)
			{
				//则将PB8拉低,LED2亮1秒
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);
				HAL_Delay(1000);
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);
			}
			else
			{
				//如果未检测到PA6,则关闭LED2
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);
			}
			break;
	}
}

        项目设计及实现

项目设计
// 如果检测到 PA4 被拉低(小偷偷车),并且警报模式打开
    // 则将 PB7 拉低,继电器通电,喇叭一直响 // 如果检测到 PA5 被拉高(按键 A 按下),设定为开启警报模式
    // 则将 PB7 拉低(喇叭响), 2 秒后恢复电平(喇叭不响),表示进入警报模式
    // 同时将标志位设置为 ON
// 如果检测到 PA6 被拉高(按键 B 按下),设定为关闭警报模式
    // 则将 PB7 拉低(喇叭响), 1 秒后恢复电平(喇叭不响),表示关闭警报模式
    // 同时将标志位设置为 OFF

 

 编程实现

//重写中断服务函数,如果检测到EXTI中断请求,则进入此函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	static int mark = J_OFF;
	switch(GPIO_Pin)
	{
		//如果检测到PA4被拉低(小偷偷车),并且警报模式打开
		case GPIO_PIN_4:
			if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4) == GPIO_PIN_RESET && mark == J_ON)
			{
				//拉低PB7,继电器通电,喇叭一直响
				HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);
			}
			break;
		//如果检测到PA5被拉高(按键A被按下),设为开启警报模式
		case GPIO_PIN_5:
			if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5) == GPIO_PIN_SET)
			{
				//则将PB7拉低(喇叭响),2秒,进入报警模式	
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);
				HAL_Delay(2000);
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);
				//同时将标志位设为ON开启
				mark = J_ON;
			}
			break;
		//如果检测到PA6被拉高(按键B被按下),设为关闭警报模式
		case GPIO_PIN_6:
			if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6) == GPIO_PIN_SET)
			{
				//则将PB7拉低(喇叭响),1秒,关闭报警模式	
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);
				HAL_Delay(1000);
				HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);
				//同时将标志位设为OFF开启
				mark = J_OFF;
			}
			break;
	}
}

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

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

相关文章

SD va01/02 保存时,产生销售订单号后的增强

业务对接外围系统,在SAP下销售订单,要求实时传递到外围系统。要求先要有销售订单编号 策略 在销售订单保存后找一处增强,并做一个日志。 日志如下: 对象类型,凭证编号序列,外围系统编号,状态…

如何快速完成TensorRT模型生成和加速

0. 简介 之前作者在《深度学习之从Python到C》介绍了一些比较传统的方法,主要侧重介绍了如何将pth和pytorch传统形式文件转化为onnx的文件,这个部分的内容,也可以主要看一下《PyTorch模型部署:pth转onnx跨框架部署详解代码》这个…

江山变压器:以数据驱动决策,CRM铸就智能制造之「变」

浙江江山变压器股份有限公司(以下简称“江变”),创始于1969年,全国变压器行业协会理事单位、全国输配电“十三五”规划的5家起草单位之一,被列入国家千家名牌培育工程。 公司主要客户为国家电网、南方电网、五大发电集团,产品远销…

微信小程序设置 本地图片为背景图

微信小程序 通过wxss进行设置 背景图报错 经查询,发现微信小程序中,将网络图片或base64图片设置为背景图片可正常显示,将本地图片设置为背景图片则不能显示,解决方法有三种,个人采用的是第三种方法。 1. 本地图片转换…

私有云和公有云是什么?有什么区别?

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、私有云和公有云是什么? 1、私有云是什么? 2、公有云是什么? 二、举个例子 1、私有云 2、公…

内网渗透—Linux上线

内网渗透—Linux上线 1. 前言2. 下载插件3. CS配置3.1. 客户端配置3.1.1. 导入插件文件3.1.2. 配置监听 3.2. 服务端配置3.2.1. 导入配置文件 3.3. 生成木马3.3.1. 修改cna文件3.3.2. 修改后效果 3.4. 执行木马 1. 前言 默认情况下CS是不支持上线Linux的,只支持上线…

媒介易教你海外品牌推广:如何选择适合的新闻通稿发布平台?

在进行海外品牌推广时,选择合适的海外新闻通稿发布第三方平台是提高品牌曝光度和影响力的重要一环。这些平台可以帮助企业将新闻内容传播到全球范围内的媒体和受众,为品牌推广提供更广阔的机会。然而,选择合适的发布平台并不容易,…

乐盒开源盲盒uniapp源码系统

源码我也没测试过小白就不要尝试了 下载下来,之后,通过 node 安装如下依赖,即可查看效果: npm install uni-simple-router # 或者:yarn add uni-simple-router npm install uni-simple-router npm install uni-read…

图解数据结构--栈的实现-C语言版本--源码

目录-总 -分- 总结构 图片可视化 总源码1.头文件介绍---分2.节点的实现3.栈顶栈底4.函数的提前声明5. 栈 ---初始化栈6. 栈 ---进栈7.栈 --- 遍历8.栈 --- 是否为空9.栈 --- 出栈10总结 图片可视化 总 源码 /*time 2023年6月12日12:39:06auther yzmcntent stract 栈 */#inclu…

行业报告 | 企业AIGC商业落地应用研究报告

原创 | 文 BFT机器人 01 AIGC(生成式人工智能)定义 02 洞观:AIGC市场全貌与供应商的摩拳擦掌 生成式人工智能技术的落地已经远远超出了商业化的进程 在企业现有数字化作业体系中切入,成为AIGC率先落地的存量场景 和SaaS同根的生成…

破坏双亲委派机制(自定义类加载器)

jvm中讲过,一个类的创建是要经历类加载器的,那么我们来讲讲如何自定义类加载器。 jvm优先级最高的就是自定义类加载器,为什么这么说呢?我们来看看类加载器的源码: 首先我们解释一下这个方法做了什么,要求返…

网络套接字编程

之前我们粗浅的认识了一下网络的一些知识,比如OSI七层模型,TCP/IP四层模型,那么我们具体怎么实现两台主机的交互呢? 在学习这些之前,我们需要准备一些预备知识。 目录 预备知识 1:认识源IP地址和目的IP地址 2&…

matlab字符串的操作方法

一个字符串是存储在一个行向量中的文本,这个行向量中的每一个元素代表一个字符,字符串可以由0个或多个字符组成。下面是一些字符串的操作方法 (1)字符串的创建 MATLAB中创建字符串非常简单,将字符串中的字符放到一对…

Jmeter接口之间的动态关联(同一线程组和跨线程组)

目录 前言: 动态关联提取cookie 1.同一线程组里的请求之间进行动态关联 2.跨线程组之间的动态关联 前言: 在进行接口测试时,有时候需要将一个接口的返回值作为参数传递给另一个接口,这就需要用到动态关联。JMeter提供了丰富的…

Haproxy负载均衡集群(时间能回答少年的所有不解)

文章目录 一、Haproxy的基础了解1.常用的负载均衡调度器2.Haproxy 应用相比较其他的优缺点3.Haproxy的特性4.LVS、Nginx、HAproxy的区别 二、Haproy负载均衡部署1.实验前准备2.实验的具体操作步骤步骤一:部署haproxy负载均衡调度器步骤二:Nginx节点服务器…

MySQL——深入理解

前言 MySQL——深入理解主要包括MySQL的存储引擎、索引以及索引对数据库操作的性能优化、SQL优化、视图、存储过程、存储函数、触发器、锁、innoDB引擎的结构原理和数据库的相关管理操作。在这篇文章中,荔枝也是且学且整理,希望能帮助到有需要的小伙伴吧…

Esxi6给虚拟机磁盘扩容

需求 因为最初磁盘规划没想好,导致磁盘给的太小,很快磁盘被用满了,所以需要把该磁盘扩容。 我们这里尝试将/home分区由原来的45GB增加50GB,所以首先我们需要将整个虚拟机扩容50GB,然后再把这50GB全部分给/home分区&a…

前端网址收藏

1.图标库 ByteDance IconPark

WebGL的一些Bug

一、TypeErrpr,Cannot set properties of undefined("setting 1") at _JS_WebRequest_Create(...) 类似这样的问题 解决方案1:可能是BestHTTP插件导致的,打开BestHttp插件目录,找到BestHTTP/Plugins/WebGL目录文件夹下的&#xff…

COMSOL晶体材料损伤断裂模拟基于Voronoi维诺图泰森多边形建模

在外部荷载及内力效应的作用下,晶体材料将发生断裂破坏,按晶体材料断裂时裂纹扩展路径的差异,可将晶体的断裂分为穿晶断裂及沿晶断裂两种断裂形式。 穿晶断裂中裂纹穿过晶体的晶粒内部,断裂面较为粗糙;沿晶断裂中裂纹…