在淘寶購買的尋跡模塊+自己做的小車底盤 測試成功
#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接四路尋跡模塊接口第一路輸出信號即中控板上面標記為OUT1 #define Right_1_led P3_3 //P3_3接四路尋跡模塊接口第二路輸出信號即中控板上面標記為OUT2 #define Left_2_led P3_4 //P3_4接四路尋跡模塊接口第三路輸出信號即中控板上面標記為OUT3 #define Right_2_led P3_5 //P3_5接四路尋跡模塊接口第四路輸出信號即中控板上面標記為OUT4 #define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左邊兩個電機向后轉 #define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左邊兩個電機向前走 #define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左邊兩個電機停轉 #define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右邊兩個電機向前走 #define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右邊兩個電機向前走 #define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右邊兩個電機停轉 /*********************************延時函數 ***************************************/ void delay(uint k) { uint x,y; for(x=0;x<k;x++) for(y=0;y<2000;y++); } /**********************************前進**************************************/ void run(void) { Left_moto_go ; Right_moto_go ; } /**********************************后退**************************************/ void back(void) { Left_moto_back; //左邊兩個電機反式開始轉 Right_moto_back; //右邊兩個電機反轉 } /**********************************左轉**************************************/ void leftrun(void) { Right_moto_go; //右邊兩個電機正轉 Left_moto_back; //左邊兩個電機反式開始轉 } /**********************************右轉**************************************/ void rightrun(void) { Left_moto_go; //左邊兩個電機正轉 Right_moto_back; //右邊兩個電機反轉 } /**********************************停止**************************************/ void stop(void) { Left_moto_Stop; //右邊兩個電機正轉 Right_moto_Stop; //左邊兩個電機反式開始? } /**********************************遙控模塊**************************************/ void remotecontrol() { if(P2_0 == 1) { delay(10);//延時去抖動 if(P2_0==1) { run(); } } if(P2_1 == 1) { delay(10);//延時去抖動 if(P2_1==1) { back(); } } if(P2_2 == 1) { delay(10);//延時去抖動 if(P2_2==1) { leftrun(); } } if(P2_3 == 1) { delay(10);//延時去抖動 if(P2_3==1) { rightrun(); } } } /***********************************循跡模塊***********************************/ void track() { if(Left_1_led==0&&Right_1_led==0) //有信號為0 沒有信號為1 run(); else { if(Left_1_led==0&&Right_1_led==1) //右邊檢測到黑線 { rightrun(); } if(Right_1_led==0&&Left_1_led==1) //左邊檢測到黑線 { leftrun(); } if(Right_1_led==1&&Left_1_led==1) //左邊檢測到黑線 { stop(); } } } /***********************************避障***************************************/ void bar() { if(Left_2_led==1&&Right_2_led==1) //有信號為0 沒有信號為1 run(); else { if(Left_2_led==1&&Right_2_led==0) //右邊檢測到障礙 { leftrun(); } if(Right_2_led==1&&Left_2_led==0) //左邊檢測到障礙 { rightrun(); } if(Right_2_led==0&&Left_2_led==0) //左右邊都檢測到障礙 { rightrun(); } } } /**********************************主函數**************************************/ void main(void) { while(1) /*無限循環*/ { if(P2_4 == 0) { delay(10);//延時去抖動 if(P2_4==0) { stop(); while(P2_5&P2_6) { remotecontrol(); } } } if(P2_5 == 0) { delay(10);//延時去抖動 if(P2_5==0) { while(P2_4&P2_6) { track(); } } } if(P2_6 == 0) { delay(10);//延時去抖動 if(P2_6==0) { while(P2_4&P2_5) { bar(); } } } } }