赞
踩
紧接着上一篇博客的内容,上一节内容.我们添加了红外模块.用于实现循迹模块,
这一篇博客,将在上一篇的基础上.添加小车的跟随模块.原理与循迹模块类似
跟随模块与循迹模块类似,都是靠红外的反射.但是跟随模块红外朝外,而循迹模块红外朝下.
如图:
左边跟随模块能返回红外,输出低电平,右边不能返回,输出高电平,说明物体在左边,需要左转
右边跟随模块能返回红外,输出低电平,左边不能返回,输出高电平,说明物体在右边,需要右转
B-1A – PA0
B-1B – PB1
A-1A – PA1
A-1B – PB10
跟随模块(左) – PB5
跟随模块(右) – PB6
其他的配置都基于上一篇博客文章的内容.
由于上篇代码是循迹模块的代码,所以我们为了保留之前的代码,保留之前的循迹功能,我们可以定义一个全局变量
#define XJMS 1
#define GSMS 2
// 定义全局变量mode
char mode = XJMS;
然后通过串口1中断,对他进行修改,串口用蓝牙模块进行连接控制.
提示:蓝牙模块需将波特率设置为9600,至少我的蓝牙模块需要
由于代码太长了,就将代码封装到一个文件中
motor.c
#include "motor.h" #include "gpio.h" #include "tim.h" // 左轮动 void goForward(void) { //前进 __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,200); __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,200); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET); } void turnLeft(void) { //左转 __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,80); __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,200); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET); } void turnRight(void) { //右进 __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,200); __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,80); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET); } void stop(void) { //停止 __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,0); __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,0); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET); }
main.c
if(mode == XJMS) { if(LEFTWHEEL == GPIO_PIN_RESET && RIGHTWHEEL == GPIO_PIN_RESET) { goForward(); } if(LEFTWHEEL == GPIO_PIN_SET && RIGHTWHEEL == GPIO_PIN_RESET) { turnLeft(); } if(LEFTWHEEL == GPIO_PIN_RESET && RIGHTWHEEL == GPIO_PIN_SET) { turnRight(); } if(LEFTWHEEL == GPIO_PIN_SET && RIGHTWHEEL == GPIO_PIN_SET) { stop(); } } if(mode ==GSMS){ if(LEFTWT == GPIO_PIN_RESET && RIGHTWT == GPIO_PIN_RESET) { goForward(); } if(LEFTWT == GPIO_PIN_SET && RIGHTWT == GPIO_PIN_RESET) { turnRight(); } if(LEFTWT == GPIO_PIN_RESET && RIGHTWT == GPIO_PIN_SET) { turnLeft(); } if(LEFTWT == GPIO_PIN_SET && RIGHTWT == GPIO_PIN_SET) { stop(); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。