|
/*****************ZYJJB09-C智能循跡、避障機器人*****************
//=====================================================================
ZYJJB09-C 單獨紅外避障演示程序
本程序通過前方的紅外探頭來檢測前面的的信號,當(dāng)前方有障礙物時
,紅外接收到信號,與黑色接受管檢測的紅外相應(yīng)端口低電平,我們就可以根據(jù)這和
判斷條件來進行
聲明:由于紅外接收頭對光線要求較高,所以對于黑白兩種顏色選擇對比度
高為好,而且因為道路建立不同,需要根據(jù)實際的需要來改寫相應(yīng)的延遲時間
以適應(yīng)角度的最有較轉(zhuǎn)彎,道路應(yīng)根據(jù)紅外接收頭的兩個寬度來制定,如果道
路較小,或較大者,請調(diào)整以適應(yīng)小車的正確運行.
備注:這里的程序以走白線為主,當(dāng)用戶需要選擇走黑線時,請根據(jù)例程作出
實際修改。并改寫相應(yīng)的延遲時間函數(shù),以進行轉(zhuǎn)彎角度在的最優(yōu)化調(diào)整.
* 平臺:ZYJJB09-C智能循跡、避障機器人 + Keil U4 + STC89C52
* 程序名稱:ZYJJB09-C 單獨紅外避障演示程序
* 公司:湖南智宇科教設(shè)備有限公司
* 編寫:智宇公司研發(fā)一部
* 日期:2015-1-15
* 交流:智能車QQ:1018973181
* 晶振:11.0592MHZ
* 售后技術(shù)說明:免費開源,不支持客戶自己修改程序分析與改正,可以提供我公司程序說明
* 免費結(jié)緣:5星好評贈送18個資料包,追加評價后再加送20G資料,網(wǎng)上網(wǎng)盤下載
* 視頻教程:本小車配套學(xué)習(xí)C語言詳細視頻教程,資料統(tǒng)一網(wǎng)盤下載
******************************************************************/ //
// 程序備注: 此程序僅為表現(xiàn)本機功能而演示用,當(dāng)用作實際工程時請慎用. //
//=====================================================================//
#include <REGX52.H> //包含51單片機相關(guān)的頭文件
sbit LeftIR=P1^1; //定義前方左側(cè)紅外探頭端口
sbit RightIR=P1^0; //定義前方右側(cè)紅外探頭端口
sbit bizhangLED=P2^0; //定義前方右側(cè)紅外探頭端口
sbit M1A=P0^0; //定義左側(cè)電機驅(qū)動A端
sbit M1B=P0^1; //定義左側(cè)電機驅(qū)動B端
sbit M2A=P0^2; //定義右側(cè)電機驅(qū)動A端
sbit M2B=P0^3; //定義右側(cè)電機驅(qū)動B端
void tingzhi()
{
M1A=0; //將M1電機A端初始化為0
M1B=0; //將M1電機B端初始化為0
M2A=0; //將M2電機A端初始化為0
M2B=0;
}
void qianjin()
{
M1A=1;
M1B=0;
M2A=1;
M2B=0;
}
void houtui()
{
M1A=0;
M1B=1;
M2A=0;
M2B=1;
}
void zuozhuan()
{
M1A=1;
M1B=0;
M2A=0;
M2B=1;
}
void youzhuan()
{
M1A=0;
M1B=1;
M2A=1;
M2B=0;
}
void delay_nus(unsigned int i) //延時:i>=12 ,i的最小延時單12 us
{
i=i/10;
while(--i);
}
void delay_nms(unsigned int n) //延時n ms
{
n=n+1;
while(--n)
delay_nus(900); //延時 1ms,同時進行補償
}
void ControlCar(unsigned char ConType) //定義電機控制子程序
{
tingzhi();
switch(ConType) //判斷用戶設(shè)定電機形式
{
case 1: //前進 //判斷用戶是否選擇形式1
{
qianjin();
break;
}
case 2: //后退 //判斷用戶是否選擇形式2
{
houtui(); //M2電機反轉(zhuǎn)
break;
}
case 3: //左轉(zhuǎn) //判斷用戶是否選擇形式3
{
zuozhuan(); //M2電機正轉(zhuǎn)
break;
}
case 4: //右轉(zhuǎn) //判斷用戶是否選擇形式4
{
youzhuan(); //M1電機正轉(zhuǎn)
//M2電機反轉(zhuǎn)
break;
}
case 8: //停止 //判斷用戶是否選擇形式8
{
tingzhi();
break; //退出當(dāng)前選擇
}
}
}
void main() //主程序入口
{
bit RunFlag=0; //定義小車運行標(biāo)志位
//RunShow=0; //初始化顯示狀態(tài)
ControlCar(8); //初始化小車運行狀態(tài)
while(1) //程序主循環(huán)
{
Start:
bizhangLED = 0;
if( LeftIR == 0 && RightIR == 1 ) //如果前面避障傳感器檢測到障礙物
{
ControlCar(8); //停止
delay_nms (300); //停止300MS 防止電機反相電壓沖擊 導(dǎo)致系統(tǒng)復(fù)位
ControlCar(4); //后退
delay_nms (260);
goto NextRun;
}
if( LeftIR == 1 && RightIR == 0 ) //如果前面避障傳感器檢測到障礙物
{
ControlCar(8); //停止
delay_nms (300); //停止300MS 防止電機反相電壓沖擊 導(dǎo)致系統(tǒng)復(fù)位
ControlCar(3); //后退
delay_nms (260);
goto NextRun;
}
if( LeftIR == 0 && RightIR == 0 ) //如果前面避障傳感器檢測到障礙物
{
ControlCar(8); //停止
delay_nms (300); //停止300MS 防止電機反相電壓沖擊 導(dǎo)致系統(tǒng)復(fù)位
ControlCar(2); //后退
delay_nms (1000); //后退1500MS
ControlCar(3); //
delay_nms (1800);
goto NextRun;
}
if( LeftIR == 1 && RightIR == 1 )
{
ControlCar(1); //右側(cè)沒有信號時,開始向左轉(zhuǎn)一定的角度
delay_nms (10);
goto NextRun;
}
goto Start;
NextRun:
ControlCar(1);
}
}
//備注:此例程僅為參考程序,請根據(jù)自己的道路進行最優(yōu)化調(diào)整。
|
評分
-
查看全部評分
|