用HC-SR501检测人接近,控制L9110风扇模块启动,人离开后关闭风扇,STM32F103ZET6
时间: 2023-06-18 12:06:14 浏览: 87
好的,你可以参考以下代码实现:
```c
#include "stm32f10x.h"
#define PIR_PIN GPIO_Pin_0
#define PIR_GPIO GPIOA
#define FAN1_PIN GPIO_Pin_0
#define FAN2_PIN GPIO_Pin_1
#define FAN_GPIO GPIOB
void GPIO_Configuration(void);
void delay_ms(uint32_t ms);
int main(void)
{
GPIO_Configuration();
while(1)
{
if(GPIO_ReadInputDataBit(PIR_GPIO, PIR_PIN)) //检测到人
{
GPIO_SetBits(FAN_GPIO, FAN1_PIN); //启动风扇
GPIO_SetBits(FAN_GPIO, FAN2_PIN);
delay_ms(5000); //延时5秒
}
else //没有检测到人
{
GPIO_ResetBits(FAN_GPIO, FAN1_PIN); //关闭风扇
GPIO_ResetBits(FAN_GPIO, FAN2_PIN);
}
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = PIR_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(PIR_GPIO, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = FAN1_PIN | FAN2_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(FAN_GPIO, &GPIO_InitStructure);
}
void delay_ms(uint32_t ms)
{
while(ms--)
{
uint32_t t = 1000;
while(t--);
}
}
```
其中,PIR_PIN 对应 HC-SR501 检测到人的信号输入引脚,FAN1_PIN 和 FAN2_PIN 对应 L9110 风扇模块的 IN1 和 IN2 引脚。
程序主要流程为:不断读取 HC-SR501 的输出信号,如果检测到人,则启动风扇,延时 5 秒后关闭风扇。如果没有检测到人,则关闭风扇。
需要注意的是,该程序使用了延时函数 delay_ms(),这可能会影响到程序的实时性。如果需要更好的实时性,可以使用定时器或者外部中断等方式来实现延时。
阅读全文