在淘寶購(gòu)買的尋跡模塊+自己做的小車底盤 測(cè)試成功
#include<reg52.h>
sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
sbit P1_3 = P1^3;
sbit P1_4 = P1^4;
sbit P1_5 = P1^5;
sbit P1_6 = P1^6;
sbit P1_7 = P1^7;
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
sbit P2_4 = P2^4;
sbit P2_5 = P2^5;
sbit P2_6 = P2^6;
sbit P2_7 = P2^7;
sbit P3_2 = P3^2;
sbit P3_3 = P3^3;
sbit P3_4 = P3^4;
sbit P3_5 = P3^5;
sbit P3_6 = P3^6;
sbit P3_7 = P3^7;
#define uchar unsigned char
#define uint unsigned int
#define Left_1_led P3_2 //P3_2接四路尋跡模塊接口第一路輸出信號(hào)即中控板上面標(biāo)記為OUT1
#define Right_1_led P3_3 //P3_3接四路尋跡模塊接口第二路輸出信號(hào)即中控板上面標(biāo)記為OUT2
#define Left_2_led P3_4 //P3_4接四路尋跡模塊接口第三路輸出信號(hào)即中控板上面標(biāo)記為OUT3
#define Right_2_led P3_5 //P3_5接四路尋跡模塊接口第四路輸出信號(hào)即中控板上面標(biāo)記為OUT4
#define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左邊兩個(gè)電機(jī)向后轉(zhuǎn)
#define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左邊兩個(gè)電機(jī)向前走
#define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左邊兩個(gè)電機(jī)停轉(zhuǎn)
#define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右邊兩個(gè)電機(jī)向前走
#define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右邊兩個(gè)電機(jī)向前走
#define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右邊兩個(gè)電機(jī)停轉(zhuǎn)
/*********************************延時(shí)函數(shù) ***************************************/
void delay(uint k)
{
uint x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
/**********************************前進(jìn)**************************************/
void run(void)
{
Left_moto_go ;
Right_moto_go ;
}
/**********************************后退**************************************/
void back(void)
{
Left_moto_back; //左邊兩個(gè)電機(jī)反式開(kāi)始轉(zhuǎn)
Right_moto_back; //右邊兩個(gè)電機(jī)反轉(zhuǎn)
}
/**********************************左轉(zhuǎn)**************************************/
void leftrun(void)
{
Right_moto_go; //右邊兩個(gè)電機(jī)正轉(zhuǎn)
Left_moto_back; //左邊兩個(gè)電機(jī)反式開(kāi)始轉(zhuǎn)
}
/**********************************右轉(zhuǎn)**************************************/
void rightrun(void)
{
Left_moto_go; //左邊兩個(gè)電機(jī)正轉(zhuǎn)
Right_moto_back; //右邊兩個(gè)電機(jī)反轉(zhuǎn)
}
/**********************************停止**************************************/
void stop(void)
{
Left_moto_Stop; //右邊兩個(gè)電機(jī)正轉(zhuǎn)
Right_moto_Stop; //左邊兩個(gè)電機(jī)反式開(kāi)始?
}
/**********************************遙控模塊**************************************/
void remotecontrol()
{
if(P2_0 == 1)
{
delay(10);//延時(shí)去抖動(dòng)
if(P2_0==1)
{
run();
}
}
if(P2_1 == 1)
{
delay(10);//延時(shí)去抖動(dòng)
if(P2_1==1)
{
back();
}
}
if(P2_2 == 1)
{
delay(10);//延時(shí)去抖動(dòng)
if(P2_2==1)
{
leftrun();
}
}
if(P2_3 == 1)
{
delay(10);//延時(shí)去抖動(dòng)
if(P2_3==1)
{
rightrun();
}
}
}
/***********************************循跡模塊***********************************/
void track()
{
if(Left_1_led==0&&Right_1_led==0) //有信號(hào)為0 沒(méi)有信號(hào)為1
run();
else
{
if(Left_1_led==0&&Right_1_led==1) //右邊檢測(cè)到黑線
{
rightrun();
}
if(Right_1_led==0&&Left_1_led==1) //左邊檢測(cè)到黑線
{
leftrun();
}
if(Right_1_led==1&&Left_1_led==1) //左邊檢測(cè)到黑線
{
stop();
}
}
}
/***********************************避障***************************************/
void bar()
{
if(Left_2_led==1&&Right_2_led==1) //有信號(hào)為0 沒(méi)有信號(hào)為1
run();
else
{
if(Left_2_led==1&&Right_2_led==0) //右邊檢測(cè)到障礙
{
leftrun();
}
if(Right_2_led==1&&Left_2_led==0) //左邊檢測(cè)到障礙
{
rightrun();
}
if(Right_2_led==0&&Left_2_led==0) //左右邊都檢測(cè)到障礙
{
rightrun();
}
}
}
/**********************************主函數(shù)**************************************/
void main(void)
{
while(1) /*無(wú)限循環(huán)*/
{
if(P2_4 == 0)
{
delay(10);//延時(shí)去抖動(dòng)
if(P2_4==0)
{
stop();
while(P2_5&P2_6)
{
remotecontrol();
}
}
}
if(P2_5 == 0)
{
delay(10);//延時(shí)去抖動(dòng)
if(P2_5==0)
{
while(P2_4&P2_6)
{
track();
}
}
}
if(P2_6 == 0)
{
delay(10);//延時(shí)去抖動(dòng)
if(P2_6==0)
{
while(P2_4&P2_5)
{
bar();
}
}
}
}
}
