资源描述:
《循迹小车编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、/*-----------------------------------------------------------------------------小车运行主程序---------------------------------------------------------------------------1.假定:IN1=1,IN3=1时电机正向转动,必须保证本条件2.假定:遇到白线输出0,遇到黑线输出1;如果实际电路是:遇到白线输出1,遇到黑线输出0,这种情况下只需要将第四,第五句改成:#definem01#
2、definem10即可。3.说明1:直行,转弯,调头时,速度full_speed_left和full_speed_right微小校正时,高速轮full_speed,低速轮correct_speed可以通过调节第六,七,八条程序,改变各个状态下的占空比(Dutycycle),以求达到合适的转弯,直行速度4.lenth5.width6.mid3作为判断中心位置是否进入黑线的标志,由于运行的粗糙性,取left2
3、
4、mid3
5、
6、right4中的任意一个去检测黑线即可-----------------------------------
7、-----------------------------------------------------------------------------*/#include#defineucharunsignedchar#defineuintunsignedint#definem01//如果实际电路是:遇到白线输出1,遇到黑线输出0,#definem10//这种情况下只需要改成:m0=1;m1=0;即可//#definejudge_leftleft1//本来应该用mid3判断是否遇到黑线停止转动//#def
8、inejudge_rightright5//但考虑到惯性,用最边缘的作判断#definefull_speed_left50//方便调节各个状态的占空比,//左轮//可用参数组:(30,35,6,25,30,68000,27000,500);(30,35)#definefull_speed_right50//右轮//#definecorrect_speed35//校正时的低速端的占空比//#defineturn_speed_left20#defineturn_speed_right20//(25,30)--(10,15)--(1
9、8,23)//定义反应时间#definelenth40000//length检测到黑线到启动转动的时间间隔10000--》100--》500--》2000--80000--76000--68000#definewidth300//mid3在黑线上到脱离黑线的时间差500--》10-->2000--》60000--30000---》27000#definecheck_right500//check_right若先检测到左边黑线,并且左边已出黑线,判断右端是否压黑线时间拖延2000--》20--》200--》500//#defin
10、eflagleft2
11、
12、mid3
13、
14、right4ucharDuty_left,Duty_right,i=0,j=0;//左右占空比标志,取1--100ucharENA=0,ENB=0;//A为左,B为右sbitIN1=P2^0;//左电机0正转右拐sbitIN2=P2^1;sbitIN3=P2^2;//右电机0正转左拐sbitIN4=P2^3;//sbitENA=P1^0;//sbitENB=P1^1;//循迹口五个红外传感器sbitleft1=P1^0;//白sbitleft2=P1^1;//白sbitmid3=P1^2;/
15、/黑线位置,遇到白线输出0,遇到黑线输出1;sbitright4=P1^3;//白sbitright5=P1^4;//白voiddelay(longintDelay_time)//延时函数{uintt=Delay_time;while(t--);}voidinit()//定时器初始化{TMOD
16、=0x01;TH0=(65536-66)/256;TL0=(65536-66)%256;EA=1;ET0=1;TR0=1;}voidtime0(void)interrupt1//中断程序{i++;//调速在中断中执行j++;if(i<=
17、Duty_left)//调节占空比ENA=1;//使能elseENA=0;if(i>100)//完成了一个周期{ENA=1;i=0;}if(j<=Duty_right)ENB=1;elseENB=0;if(j>100){ENB=1;j=0;}TH0=(65536-66)/25