基于stm32f103,使用红外避障,oled,舵机,rc22实现用户靠近舵机旋转,rc522刷卡oled显示衣服信息基于stm32f103的代码,使用红外避障,oled,舵机,rc22实现用户靠近舵机旋转,rc522刷卡oled显示衣服信息的程序
时间: 2023-11-17 20:08:13 浏览: 58
STM32F103ZET6步进电机智能小车红外避障+红外跟随+红外循迹+超声波避障程序源代码.rar
5星 · 资源好评率100%
由于这个项目比较复杂,涉及多个硬件模块的操作,因此程序也比较长。下面是一个简化版本的程序,只包含了基本的功能实现。
```c
#include "stm32f10x.h"
#include "oled.h"
#include "rc522.h"
#include "servo.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
void delay_ms(uint16_t ms);
int main(void)
{
RCC_APB2PeriphClockCmd(IR_RCC | USER_RCC | LED_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);
OLED_Init();
RC522_Init();
Servo_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);
}
delay_ms(10);
}
}
void delay_ms(uint16_t ms)
{
uint32_t count = SystemCoreClock / 10000 * ms;
while (count--)
;
}
```
需要注意的是,这个程序只是一个简化版的示例程序,实际使用时需要根据具体的硬件接口和功能要求进行修改和优化。
阅读全文