在淘寶購(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ī)反式開始轉(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ī)反式開始轉(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ī)反式開始? } /**********************************遙控模塊**************************************/ 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(); } } } } }