写一段STM32F103C8T6的循迹避障小车代码
时间: 2023-07-10 20:35:30 浏览: 128
STM32F103C8T6单片机前轮转向小车黑线循迹避障运动程序源代码.rar
5星 · 资源好评率100%
好的,下面是一份简单的STM32F103C8T6循迹避障小车代码:
```
#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#define LEFT_SENSOR GPIO_Pin_0
#define CENTER_SENSOR GPIO_Pin_1
#define RIGHT_SENSOR GPIO_Pin_2
#define MOTOR_LEFT GPIO_Pin_3
#define MOTOR_RIGHT GPIO_Pin_4
void GPIO_Configuration(void);
void Motor_Control(int left, int right);
void Delay(uint32_t nCount);
int main(void)
{
GPIO_Configuration();
while (1)
{
if (GPIO_ReadInputDataBit(GPIOA, LEFT_SENSOR) == 0 && GPIO_ReadInputDataBit(GPIOA, CENTER_SENSOR) == 0 && GPIO_ReadInputDataBit(GPIOA, RIGHT_SENSOR) == 0)
{
Motor_Control(0, 0);
Delay(1000);
Motor_Control(1, 0);
Delay(1000);
}
else if (GPIO_ReadInputDataBit(GPIOA, LEFT_SENSOR) == 1 && GPIO_ReadInputDataBit(GPIOA, CENTER_SENSOR) == 0 && GPIO_ReadInputDataBit(GPIOA, RIGHT_SENSOR) == 1)
{
Motor_Control(1, 1);
}
else if (GPIO_ReadInputDataBit(GPIOA, LEFT_SENSOR) == 0 && GPIO_ReadInputDataBit(GPIOA, CENTER_SENSOR) == 0 && GPIO_ReadInputDataBit(GPIOA, RIGHT_SENSOR) == 1)
{
Motor_Control(1, 0);
}
else if (GPIO_ReadInputDataBit(GPIOA, LEFT_SENSOR) == 1 && GPIO_ReadInputDataBit(GPIOA, CENTER_SENSOR) == 0 && GPIO_ReadInputDataBit(GPIOA, RIGHT_SENSOR) == 0)
{
Motor_Control(0, 1);
}
else if (GPIO_ReadInputDataBit(GPIOA, LEFT_SENSOR) == 1 && GPIO_ReadInputDataBit(GPIOA, CENTER_SENSOR) == 1 && GPIO_ReadInputDataBit(GPIOA, RIGHT_SENSOR) == 0)
{
Motor_Control(0, 1);
}
else if (GPIO_ReadInputDataBit(GPIOA, LEFT_SENSOR) == 0 && GPIO_ReadInputDataBit(GPIOA, CENTER_SENSOR) == 1 && GPIO_ReadInputDataBit(GPIOA, RIGHT_SENSOR) == 1)
{
Motor_Control(1, 0);
}
else
{
Motor_Control(1, 1);
}
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = LEFT_SENSOR | CENTER_SENSOR | RIGHT_SENSOR | MOTOR_LEFT | MOTOR_RIGHT;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void Motor_Control(int left, int right)
{
if (left == 1)
{
GPIO_SetBits(GPIOA, MOTOR_LEFT);
}
else
{
GPIO_ResetBits(GPIOA, MOTOR_LEFT);
}
if (right == 1)
{
GPIO_SetBits(GPIOA, MOTOR_RIGHT);
}
else
{
GPIO_ResetBits(GPIOA, MOTOR_RIGHT);
}
}
void Delay(uint32_t nCount)
{
while(nCount--)
{
__NOP();
}
}
```
这段代码是一个简单的循迹避障小车代码,其中使用了三个红外传感器来检测小车前方的障碍物和黑线,根据传感器的状态控制左右轮电机的动作,从而实现小车的循迹和避障功能。
阅读全文