基于stm32f103,实现避障感应靠近舵机旋转,rc522刷卡oled显示衣服信息,dht11温湿度检测到温度大于35摄氏度,湿度小于70,启动风扇电机的程序
时间: 2023-08-27 18:03:51 浏览: 183
好的,这个项目也比较复杂,需要涉及多个硬件模块的操作。下面是一个简化版本的程序,实现避障感应靠近舵机旋转,RC522刷卡OLED显示衣服信息,DHT11温湿度检测到温度大于35摄氏度,湿度小于70,启动风扇电机的功能。
```c
#include "stm32f10x.h"
#include "oled.h"
#include "rc522.h"
#include "servo.h"
#include "dht11.h"
#define IR_PIN GPIO_Pin_0
#define IR_PORT GPIOA
#define IR_RCC RCC_APB2Periph_GPIOA
#define USER_PIN GPIO_Pin_1
#define USER_PORT GPIOA
#define USER_RCC RCC_APB2Periph_GPIOA
#define LED_PIN GPIO_Pin_13
#define LED_PORT GPIOC
#define LED_RCC RCC_APB2Periph_GPIOC
#define FAN_PIN GPIO_Pin_2
#define FAN_PORT GPIOB
#define FAN_RCC RCC_APB2Periph_GPIOB
void delay_ms(uint16_t ms);
int main(void)
{
RCC_APB2PeriphClockCmd(IR_RCC | USER_RCC | LED_RCC | FAN_RCC, ENABLE);
GPIO_InitTypeDef gpio;
gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING;
gpio.GPIO_Speed = GPIO_Speed_50MHz;
gpio.GPIO_Pin = IR_PIN;
GPIO_Init(IR_PORT, &gpio);
gpio.GPIO_Pin = USER_PIN;
GPIO_Init(USER_PORT, &gpio);
gpio.GPIO_Mode = GPIO_Mode_Out_PP;
gpio.GPIO_Pin = LED_PIN;
GPIO_Init(LED_PORT, &gpio);
gpio.GPIO_Pin = FAN_PIN;
GPIO_Init(FAN_PORT, &gpio);
OLED_Init();
RC522_Init();
Servo_Init();
DHT11_Init();
while (1)
{
// 红外避障
if (GPIO_ReadInputDataBit(IR_PORT, IR_PIN) == Bit_RESET)
{
LED_PORT->BSRR = LED_PIN;
Servo_SetAngle(90);
}
else
{
LED_PORT->BRR = LED_PIN;
}
// 用户靠近
if (GPIO_ReadInputDataBit(USER_PORT, USER_PIN) == Bit_RESET)
{
LED_PORT->BSRR = LED_PIN;
Servo_SetAngle(0);
}
else
{
LED_PORT->BRR = LED_PIN;
}
// 刷卡
if (RC522_Check())
{
char buffer[32];
RC522_ReadCard(buffer);
OLED_Clear();
OLED_ShowString(0, 0, "Card Info:");
OLED_ShowString(0, 2, buffer);
}
// 温湿度检测
DHT11_Read_Data();
if (DHT11_Data.Temperature > 35 && DHT11_Data.Humidity < 70)
{
FAN_PORT->BSRR = FAN_PIN;
}
else
{
FAN_PORT->BRR = FAN_PIN;
}
delay_ms(10);
}
}
void delay_ms(uint16_t ms)
{
uint32_t count = SystemCoreClock / 10000 * ms;
while (count--)
;
}
```
需要注意的是,这个程序只是一个简化版的示例程序,实际使用时需要根据具体的硬件接口和功能要求进行修改和优化。同时,需要注意风扇电机的控制,需要使用PWM输出来控制风扇的转速。
阅读全文