STM32藍牙控制循跡避障小車源代碼——2.循跡模塊
注意-所需模塊:

接線:四個循跡模塊(從左到右分別為1,2,3,4)
B4–第1個循跡模塊的D0
B5–第2個循跡模塊的D0
B6–第3個循跡模塊的D0
B7–第4個循跡模塊的D0
代碼
所有的代碼都是直接從工程里面復制的,實測是沒有問題的,
參考文章: 基于STM32F103C8T6的循跡避障小車完整制作程序
我這里再簡單總結一下:
四個IO口,VCC,GND,A0,D0.
用3個,即VCC,GND,D0(輸出高低電平)
當模塊檢測到黑線的時候,D0輸出高電平,正常情況下D0輸出處低電平,
定義B4,B5,B6,B7引腳,分別接到4個循跡模塊上的D0口,
四個循跡模塊從左到右依次為: 1 2 3 4
如果4個全部沒有讀取黑線,直走; Forward();
如果2,3讀取黑線,直走; Forward();
如果2讀取黑線,左轉; Turn_left();
如果3讀取黑線,右轉; Turn_right();
如果1讀取黑線,大左轉; Big_Turn_left();
如果4讀取黑線,大右轉; Big_Turn_right();
xunji.c
#include "XUNJI.H"
// 1 2 3 4 : B4 B5 B6 B7
void xunji_config(void)//引腳初始化
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能GPIOB
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;//上拉輸入
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);//初始化B4,B5,B6,B7
}
void Read_xunji_Date(void)//讀取兩個循跡模塊的電平
{
xunji_1;
xunji_2;
xunji_3;
xunji_4;
}
xunji.h:
#ifndef __XUNJI_H
#define __XUNJI_H
#include "stm32f10x.h"
//定義B4,B5引腳讀取循跡模塊D0
#define xunji_1 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)
#define xunji_2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)
#define xunji_3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)
#define xunji_4 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)
void xunji_config(void);
void Read_xunji_Date(void);
#endif
測驗
將上面兩個代碼寫進工程里,在主函式里寫進以下代碼,
main.c
#include "stm32f10x.h"
#include "moter.h"
#include "delay.h"
#include "xunji.h"
#include "usart.h"
//循跡模塊從左到右為: 1 2 3 4 : B4 B5 B6 B7
int main(void)
{
delay_init(); //延時初始化
TIM3_PWM_Init(); //電機pwm TIM3
xunji_config(); //引腳初始化
while(1)
{
Read_xunji_Date();//讀取循跡值
if(xunji_1==0&&xunji_2==0&&xunji_3==0&&xunji_4==0)//如果4個全部沒有讀取黑線,直走; Forward();
{
Forward(500);
delay_ms(5);
}
if(xunji_1==0&&xunji_2==1&&xunji_3==1&&xunji_4==0)//如果2,3讀取黑線,直走; Forward();
{
Forward(500);
delay_ms(5);
}
if(xunji_1==0&&xunji_2==1&&xunji_3==0&&xunji_4==0)//如果2讀取黑線,左轉; Turn_left();
{
Turn_left(500);
delay_ms(5);
}
if(xunji_1==0&&xunji_2==0&&xunji_3==1&&xunji_4==0)//如果3讀取黑線,右轉; Turn_right();
{
Turn_right(500);
delay_ms(5);
}
if(xunji_1==1&&xunji_2==0&&xunji_3==0&&xunji_4==0)//如果1讀取黑線,大左轉; Big_Turn_left();
{
Big_Turn_left(200);
delay_ms(5);
}
if(xunji_1==0&&xunji_2==0&&xunji_3==0&&xunji_4==1)//如果4讀取黑線,大右轉; Big_Turn_right();
{
Big_Turn_right(200);
delay_ms(5);
}
}
}
工程專案:
https://download.csdn.net/download/www_haha__/64046749
下一節我會寫舵機和超聲波
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/382105.html
標籤:其他
