小车四驱循迹代码 STM32C8T6
以下是一个简单的四驱循迹代码示例,使用STM32C8T6单片机:
#include "stm32f10x.h"
#define LEFT_FORWARD GPIO_Pin_0
#define LEFT_BACKWARD GPIO_Pin_1
#define RIGHT_FORWARD GPIO_Pin_2
#define RIGHT_BACKWARD GPIO_Pin_3
#define LEFT_SENSOR GPIO_Pin_4
#define RIGHT_SENSOR GPIO_Pin_5
void GPIO_Configuration(void);
void Car_Stop(void);
void Car_Forward(void);
void Car_Backward(void);
void Car_Left(void);
void Car_Right(void);
int main(void)
{
GPIO_Configuration();
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA, LEFT_SENSOR) && GPIO_ReadInputDataBit(GPIOA, RIGHT_SENSOR))
{
Car_Forward();
}
else if(GPIO_ReadInputDataBit(GPIOA, LEFT_SENSOR))
{
Car_Left();
}
else if(GPIO_ReadInputDataBit(GPIOA, RIGHT_SENSOR))
{
Car_Right();
}
else
{
Car_Stop();
}
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = LEFT_FORWARD | LEFT_BACKWARD | RIGHT_FORWARD | RIGHT_BACKWARD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LEFT_SENSOR | RIGHT_SENSOR;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void Car_Stop(void)
{
GPIO_ResetBits(GPIOA, LEFT_FORWARD);
GPIO_ResetBits(GPIOA, LEFT_BACKWARD);
GPIO_ResetBits(GPIOA, RIGHT_FORWARD);
GPIO_ResetBits(GPIOA, RIGHT_BACKWARD);
}
void Car_Forward(void)
{
GPIO_SetBits(GPIOA, LEFT_FORWARD);
GPIO_ResetBits(GPIOA, LEFT_BACKWARD);
GPIO_SetBits(GPIOA, RIGHT_FORWARD);
GPIO_ResetBits(GPIOA, RIGHT_BACKWARD);
}
void Car_Backward(void)
{
GPIO_ResetBits(GPIOA, LEFT_FORWARD);
GPIO_SetBits(GPIOA, LEFT_BACKWARD);
GPIO_ResetBits(GPIOA, RIGHT_FORWARD);
GPIO_SetBits(GPIOA, RIGHT_BACKWARD);
}
void Car_Left(void)
{
GPIO_ResetBits(GPIOA, LEFT_FORWARD);
GPIO_ResetBits(GPIOA, LEFT_BACKWARD);
GPIO_SetBits(GPIOA, RIGHT_FORWARD);
GPIO_ResetBits(GPIOA, RIGHT_BACKWARD);
}
void Car_Right(void)
{
GPIO_SetBits(GPIOA, LEFT_FORWARD);
GPIO_ResetBits(GPIOA, LEFT_BACKWARD);
GPIO_ResetBits(GPIOA, RIGHT_FORWARD);
GPIO_ResetBits(GPIOA, RIGHT_BACKWARD);
}
在这个代码示例中,使用了4个GPIO引脚来控制四驱小车的四个马达。同时,使用了2个GPIO引脚来读取左右两个循迹传感器的信号。
在main函数中,通过判断左右两个循迹传感器的信号,来决定小车的行动方式。当两个传感器都检测到黑色线路时,小车向前行驶;当只有左边的传感器检测到黑色线路时,小车向左转;当只有右边的传感器检测到黑色线路时,小车向右转;当两个传感器都没有检测到黑色线路时,小车停止运动。
GPIO_Configuration函数用于配置GPIO引脚的模式和速度。
Car_Stop、Car_Forward、Car_Backward、Car_Left和Car_Right函数用于控制小车的行动方式,通过控制相应的引脚电平来实现
原文地址: https://www.cveoy.top/t/topic/imlf 著作权归作者所有。请勿转载和采集!