本人小白一个,利用暑假时间在家做一些小东西。我这次想要跟大家分享的是基于STM32F103的循迹小车的制作。(两个轮子)
主要硬件:板子、L298N、电机、4个循迹模块等
话不多说,先上干货。
XJ.c
#include "XJ.h"//循迹文件
#include "stm32f10x.h"
void XJ_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//配置为浮空输入,可以读取引脚电平
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
//将所有循迹模块连接的引脚配置为高电平,当检测到黑线时,引脚会返回高电平
}
main.c(只贴出部分关键代码)
while(1){
if(KEY0==0)//Èç¹û°´¼ü0±»°´Ï£¬¿ªÆôѼ£Ä£Ê½
{
while(1)//
{
XJ1=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4);//
XJ2=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5);
XJ3=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6);
XJ4=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);
if((XJ1==1|XJ2==1)&&(XJ3==0&&XJ4==0))
{
turnleft();
delay_ms(150);
}
else if((XJ3==1|XJ4==1)&&(XJ1==0&&XJ4==0))//
{
turnright();
delay_ms(150);
}
else if((XJ1==1&&XJ2==1)&&(XJ3==1&&XJ4==1))//四个引脚都检测到高电平,停止
{
stop();
delay_ms(150);
}
else if((XJ2==0&&XJ1==0)&&(XJ4==0&&XJ3==0))
{
forward();
delay_ms(200);
}
}
}
个人总结:
在制作东西之前,一定要去查各种模块的功能简介以及使用方法。(小白我就是因为买了两种不同的模块,导致程序始终不能顺利运行,花费了很多时间去修改,最后被逼着去查了模块使用手册才解决)其次,一定要坚持,思路混乱(特别是对于像小白一样的初学者)不怕,最怕的是不去解决,可以去做一些与电子毫不相关的事情,等一会儿再来重新理思绪。还有,一定要利用MDK的软件仿真功能。最后是善于改写程序,如何让程序更高效的执行,如何将网上的资料改写成自己项目的一部分。
我曾许下十年,只为最美的遇见。
我是西伯利亚蟑螂,朋友,我们下次再见。