目录
项目需求
点击遥控器
A
按键,系统进入警戒模式,一旦检测到震动(小偷偷车),则喇叭发出声响报警,
吓退小偷。
点击遥控器
B
按键,系统退出警戒模式,再怎么摇晃系统都不会报警,否则系统一直发出尖叫,
让车主尴尬。
项目框图
硬件清单
- 振动传感器
- 继电器
- 高功率喇叭
- 433M无线接收发射模块
- 杜邦线
振动传感器介绍及实战
振动传感器介绍
单片机供电
VCC GND
接单片机
产品不震动,输出高电平,模块上的
DO
口
产品震动,输出低电平,绿色指示灯亮
AO
口不用

振动传感器编程实现
//重写中断服务函数,如果检测到EXTI中断请求,则进入此函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
//一根中断线上接有多个中断源,判断中断请求是否来自PA4
if(GPIO_Pin == GPIO_PIN_4)
{
//如果检测到PA4被拉低
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == GPIO_PIN_RESET)
{
//则点亮LED1
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
//延时1秒
HAL_Delay(1000);
//关闭LED1
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
}
else{
//未检测到PA4被拉低,则关闭LED1
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
}
}
}
如果直接在中断服务函数里调用
HAL_Delay
函数,则会造成系统卡死。
原因:程序初始化时
默认把滴答定时器的中断优先级设为最低
,其它中断源很容易打断它导致卡
死。
解决:在
main
函数里使用以下函数提高滴答定时器的中断优先级(提升至
0
):