久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 智能小車循跡程序 [打印本頁]

作者: 123321gjx    時(shí)間: 2019-3-30 17:24
標(biāo)題: 智能小車循跡程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define m0 1//黑線m1,白線m0
#define m1 0
#define full_speed_left 40 //方便調(diào)節(jié)各個(gè)狀態(tài)的占空比,可用參數(shù)組: (30,35,6,25,30,68000,27000,500);
#define full_speed_right 45 //(40,45,6,25,30,68000,27000,500);
#define correct_speed 6 //校正時(shí)的低速輪的占空比
#define turn_speed_left 25
#define turn_speed_right 30
#define lenth 68000  //測(cè)試數(shù)據(jù):10000--100--500--2000--80000--76000--68000 #define width 27000  //500--10-->2000--60000--30000---27000
#define check_right 500 //2000--20--200--500#define midl left1
#define midr right5
uchar Duty_left,Duty_right,i=0,j=0; //左右占空比標(biāo)志,1--100
sbit IN1=P2^0;
sbit IN2=P2^1;
sbit IN3=P2^2;
sbit IN4=P2^3;
sbit ENA=P1^0;
sbit ENB=P1^1;
//循跡口五組紅外對(duì)管,依次對(duì)應(yīng)從左往右第1,2,3,4,5五組
sbit left1 =P1^6;
sbit left2 =P1^5;
sbit mid3  =P1^4;
sbit right4=P1^3;
sbit right5=P1^2;
void line_left();
void line_right();
void line_straight()reentrant;
//----------------------------------------
void delay(long int Delay_time)//延時(shí)函數(shù)
{
uint t=Delay_time;
while(t--);
}
//-----------------------------------------
void init()  //定時(shí)器初始化
{
left1=m0; //初始化
left2=m0;  //白線位置
mid3 =m1;   //黑線位置
right4=m0;
right5=m0;
TMOD|=0x01;
TH0=(65536-66)/256;
TL0=(65536-66)%256;
EA=1;
ET0=1;
TR0=1;
ENA=1; //使能端口,初始化
ENB=1;
}
void time0(void)interrupt 1  //中斷程序
{
i++; //調(diào)速在中斷中執(zhí)行
j++;
if(i<=Duty_left)
ENA=1;
else ENA=0;
if(i>100)
{ENA=1;i=0;}
if(j<=Duty_right)
ENB=1;
else ENB=0;
if(j>100)
{ENB=1;j=0;}
TH0=(65536-66)/256;    //取約150HZ,12M晶振,每次定時(shí)66us,100,這樣開頭定義的變量正好直接表示占空比的數(shù)值
TL0=(65536-66)%256;
}
//-----------------------------------------------
void correct_left()//向左校正,賦值
{
Duty_left =correct_speed;
Duty_right=full_speed_right;
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
//------------------------------------------------
void correct_right()//向右校正,賦值
{
Duty_left =full_speed_left;
Duty_right=correct_speed;
N1=1;
IN2=0;
IN3=1;
IN4=0;
}
//--------------------------------------------------
void turn_left()//左轉(zhuǎn),賦值
{
Duty_left =turn_speed_left;
Duty_right=turn_speed_right;
IN1=0;  //轉(zhuǎn)彎時(shí)一個(gè)正轉(zhuǎn),一個(gè)反轉(zhuǎn),
IN2=1;
IN3=1;
IN4=0;
}
void turn_right()//右轉(zhuǎn),賦值
{
Duty_left =turn_speed_left;
Duty_right=turn_speed_right;
IN1=1;   //轉(zhuǎn)彎時(shí)一個(gè)正轉(zhuǎn),一個(gè)反轉(zhuǎn),
IN2=0;
IN3=0;
IN4=1;
}
//-----------------------------------------------------
void straight() //直走,賦值
{
Duty_left =full_speed_left; //左右電機(jī)占空比初始化,調(diào)節(jié)直線運(yùn)動(dòng)速度
Duty_right=full_speed_right; //鑒于左右輪電機(jī)內(nèi)部阻力不同,故占空比取不同值,這組值需要單獨(dú)寫程序取值
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
//-----------------------------------------------------
void line_straight()reentrant //函數(shù)名后加reentrant可以遞歸調(diào)用,//一直走黑直線時(shí)
{
straight();
if(right5==m1){line_right();}
else
if(left1==m1){line_left();}
else
if(left2==m1)    //防止校正時(shí),小車沖出過大,導(dǎo)致2,4號(hào)檢測(cè)管屏蔽了兩端檢測(cè)管的檢測(cè),避免其走直線時(shí)出軌
while(left2==m1)
{correct_left();
if(right5==m1)
{
line_right();
goto label3;
}
else if(left1==m1)
{line_left();
goto label3;}
}
else
if(right4==m1)    //防止校正時(shí),小車沖出過大,導(dǎo)致2,4號(hào)檢測(cè)管屏蔽了兩端檢測(cè)管的檢測(cè),避免其走直線時(shí)出軌
while(right4==m1)
{correct_right();
if(right5==m1)
{correct_right();
if(right5==m1)
{ line_right();  goto label3;}
else if(left1==m1)
{line_left();goto label3;}
}
else
if((left1==m0)&&(left2==m0)&&(mid3==m0)&&(right4==m0)&&(right5==m0))
{
straight();
//delay(lenth);
while(right4==m0) //本來應(yīng)該是用mid3,但是為了提高靈敏度,選擇right4;向左時(shí),可取left2對(duì)管
{turn_right();}
if(mid3==m1)
{line_straight();}
label3: ; //什么都不做
}
//------------------------------------------------------------------------- void line_right() //右邊有黑線時(shí)
{
straight();//這里的直走是在不管紅外檢測(cè)結(jié)果的直行
delay(lenth);
if(mid3==m1)
{
turn_right();//執(zhí)行向右轉(zhuǎn)的賦值
label:delay(width); //width值決定轉(zhuǎn)彎時(shí)mid3經(jīng)過黑線寬度時(shí)所需要的時(shí)間  if(mid3==m0)
while(right4==m0)
{}
else
goto label;
}
else
if(mid3==m0)
{
turn_right();
while(right4==m0)
{}
if(midr==m1)
{line_straight();}
}
}
//-----------------------------------------------------------------void line_left() //左邊出現(xiàn)黑線時(shí)
{
while(left1==m1)
{
if(right5==m1)
{
line_right();
goto label2;
}
}
delay(check_right);//左邊遇到黑線時(shí),左邊出了黑線之后,繼續(xù)延時(shí)一段時(shí)間,判斷右邊是否遇到黑線,
//若遇到黑線,執(zhí)行line_right()函數(shù)
if(right5==m1)
{
line_right();
goto label2;
}
}
delay(check_right);//左邊遇到黑線時(shí),左邊出了黑線之后,繼續(xù)延時(shí)一段時(shí)間,判斷右邊是否遇到黑線,
//若遇到黑線,執(zhí)行line_right()函數(shù)
if(right5==m1)
{
line_right();
goto label2;
}
if((mid3==m1)||(left2==m1)||(right4==m1)){line_straight();}
else
{
while(left2==m0)
{turn_left();}
if(midl==m1)
line_straight();
}
label2: ;
}
//--------------------------------------------------------------------
void detect_infrared() //循跡,紅外檢測(cè)
{
if(right5==m1){line_right();}
else
if(left1==m1){line_left();}
else
if(left2==m1){correct_left();}
else
if(right4==m1){correct_right();}
else
line_straight();
}
//--------------------------------------
void main(void)//主程序部分
{
init();
while(1) //循環(huán)檢測(cè)紅外對(duì)管采集的電平信號(hào)
{detect_infrared();}
}


作者: 單片小菜雞    時(shí)間: 2020-7-30 10:43
建議做好再發(fā)出來




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91在线视频观看 | 成人免费淫片aa视频免费 | 99精品视频在线 | 欧美lesbianxxxxhd视频社区 | 国产精品欧美一区二区三区 | 午夜久久久久久久久久一区二区 | www.日本在线| 国产午夜视频 | 狠狠狠色丁香婷婷综合久久五月 | 国产高清在线精品一区二区三区 | 日韩一区二区三区在线视频 | 韩国欧洲一级毛片 | 久久亚洲一区二区三 | 精品在线免费观看视频 | 久久33| 国精日本亚洲欧州国产中文久久 | av国产精品毛片一区二区小说 | 九九免费视频 | 久久成人精品视频 | 精品一区二区三区在线视频 | 激情毛片 | 欧美中文字幕在线观看 | 精品www | 国产视频中文字幕 | 福利av在线 | 精品久久一区 | 国产小视频在线 | 国产精品久久一区 | 国产精品精品视频一区二区三区 | 国产日韩精品在线 | 午夜精品久久久 | 亚洲成人在线免费 | 亚洲欧美日韩电影 | 亚洲精品自在在线观看 | 成人精品一区 | 久久一区二区三区四区 | 精品一二三区 | 亚洲午夜在线 | 99riav3国产精品视频 | 日韩成人中文字幕 | 久久免费国产 |