stm32f103c8t6红外循迹小车代码
时间: 2023-07-02 14:05:51 浏览: 183
循迹小车通常需要使用红外线传感器,通过检测地面上黑色或白色的区域来控制小车的行进方向。下面是一个简单的基于STM32F103C8T6的红外循迹小车代码示例:
```
#include "stm32f10x.h"
#define INFRARED_LEFT GPIO_Pin_0
#define INFRARED_RIGHT GPIO_Pin_1
void delay(uint32_t count)
{
for (uint32_t i = 0; i < count; i++);
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = INFRARED_LEFT | INFRARED_RIGHT;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // 设置输入模式,带上拉电阻
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 设置输出模式,推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
while (1)
{
if (GPIO_ReadInputDataBit(GPIOA, INFRARED_LEFT) == Bit_SET && GPIO_ReadInputDataBit(GPIOA, INFRARED_RIGHT) == Bit_SET)
{
// 左右都检测到黑线,小车停止
GPIO_SetBits(GPIOB, GPIO_Pin_0);
GPIO_SetBits(GPIOB, GPIO_Pin_1);
GPIO_SetBits(GPIOB, GPIO_Pin_10);
GPIO_SetBits(GPIOB, GPIO_Pin_11);
}
else if (GPIO_ReadInputDataBit(GPIOA, INFRARED_LEFT) == Bit_SET && GPIO_ReadInputDataBit(GPIOA, INFRARED_RIGHT) == Bit_RESET)
{
// 左边检测到黑线,小车向左转
GPIO_SetBits(GPIOB, GPIO_Pin_1);
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
GPIO_SetBits(GPIOB, GPIO_Pin_10);
GPIO_ResetBits(GPIOB, GPIO_Pin_11);
}
else if (GPIO_ReadInputDataBit(GPIOA, INFRARED_LEFT) == Bit_RESET && GPIO_ReadInputDataBit(GPIOA, INFRARED_RIGHT) == Bit_SET)
{
// 右边检测到黑线,小车向右转
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
GPIO_SetBits(GPIOB, GPIO_Pin_0);
GPIO_ResetBits(GPIOB, GPIO_Pin_10);
GPIO_SetBits(GPIOB, GPIO_Pin_11);
}
else
{
// 左右都没检测到黑线,小车直行
GPIO_SetBits(GPIOB, GPIO_Pin_0);
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
GPIO_SetBits(GPIOB, GPIO_Pin_11);
GPIO_ResetBits(GPIOB, GPIO_Pin_10);
}
delay(1000); // 延时一段时间再检测
}
}
```
上述代码使用PA0和PA1作为红外线传感器的输入引脚,PB0、PB1、PB10和PB11分别控制小车的四个轮子。在主循环中不断检测红外线传感器的状态,并根据检测结果控制小车的行进方向。具体来说,如果左右两个传感器都检测到黑线,则小车停止;如果只有左边检测到黑线,则小车向左转;如果只有右边检测到黑线,则小车向右转;否则,小车直行。注意在每次检测后需要延时一段时间,否则小车会一直在同一状态下运行。
阅读全文