📄 last.txt
字号:
if(limit1<sam_atd_g[10]){
check_v=bend[0];
check_bend2();
front=19;
chang_f();
}
check_v=strait[2];
check_bend();
front=18;
chang_f();
}else if(limit1<sam_atd_g[3]){
if(limit1<sam_atd_g[4]){
check_v=bend[1];
check_bend1();
front=7;
chang_f();
}
check_v=bend[0];
check_bend1();
front=8;
chang_f();
}else if(limit1<sam_atd_g[10]){
if(limit1<sam_atd_g[11]){
check_v=bend[1];
check_bend2();
front=21;
chang_f();
}
check_v=bend[0];
check_bend2();
front=20;
chang_f();
}else if(limit1<sam_atd_g[4]){
if(limit1<sam_atd_g[5]){
check_v=bend[2];
check_bend1();
front=5;
chang_f();
}
check_v=bend[1];
check_bend1();
front=6;
chang_f();
}else if(limit1<sam_atd_g[11]){
if(limit1<sam_atd_g[12]){
check_v=bend[2];
check_bend2();
front=23;
chang_f();
}
check_v=bend[1];
check_bend2();
front=22;
chang_f();
}else if(limit1<sam_atd_g[5]){
if(limit1<sam_atd_g[6]){
check_v=bend[3];
check_bend1();
front=3;
chang_f();
}
check_v=bend[2];
check_bend1();
front=4;
chang_f();
}else if(limit1<sam_atd_g[12]){
if(limit1<sam_atd_g[13]){
check_v=bend[3];
;
check_bend2();
front=25;
chang_f();
}
check_v=bend[2];
check_bend2();
front=24;
chang_f();
}else if(limit1<sam_atd_g[6]){
if(limit1<sam_atd_g[7]){
check_v=bend[4];
front=1;
check_bend1();
chang_f();
}
check_v=bend[3];
check_bend1();
front=2;
chang_f();
}else if(limit1<sam_atd_g[13]){
if(limit1<sam_atd_g[14]){
check_v=bend[4];
front=27;
check_bend2();
chang_f();
}
check_v=bend[3];
check_bend2();
front=26;
chang_f();
}else if(limit1<sam_atd_g[7]){
check_v=bend[4];
check_bend1();
front=0;
chang_f();
}else if(limit1<sam_atd_g[14]){
check_v=bend[4];
check_bend2();
front=28;
chang_f();
}
}
/*--------------------------------------------CHANG_F-----------------------------------------------------*/
/*当下一个方向值和前一个方向值相同时不改变小车方向,只有
当检测到方向值1(FRONT1)与方向值(FRONT)不同时实现改变 */
void chang_f(void){
if(front!=front1){
PWMDTY45=table[front];
front1=front;
}
}
/*--------------------------------------CHANG_F1---------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------SAM_POSITION-----------------------------------------------*/
// the function is used for sampling the actual position of cruisecar.
// notice:
void sam_position(void)
{
sam_atd_g[0]=ATD0DR0L; //These are the values of ATD0
sam_atd_g[1]=ATD0DR1L;
sam_atd_g[2]=ATD0DR2L;
sam_atd_g[3]=ATD0DR3L;
sam_atd_g[4]=ATD0DR4L;
sam_atd_g[5]=ATD0DR5L;
sam_atd_g[6]=ATD0DR6L;
sam_atd_g[7]=ATD0DR7L; //These the values of ATD1
sam_atd_g[8]=ATD1DR0L;
sam_atd_g[9]=ATD1DR1L;
sam_atd_g[10]=ATD1DR2L;
sam_atd_g[11]=ATD1DR3L;
sam_atd_g[12]=ATD1DR4L;
sam_atd_g[13]=ATD1DR5L;
sam_atd_g[14]=ATD1DR6L;
}
/*________________________________________________________________________________________________________*/
/* void check_sta_comp(void){
byte i;
byte sat_comp_f[15];//起跑线检测标志
for(i=0;i<=14;i++){
sat_comp_f[i]=sam_atd_g[i]-limit1;
}
}
*/
/*---------------------------------------------PID_C------------------------------------------------------*/
/*----------------------------------------------check_bend__________________________________________*/
/* */
void check_bend(void){
cnt1++;
if(cnt1>8000){ //检测直道
flag1=1;
bend_fl=1;
cnt1=cnt2=cnt3=flag2=flag3=0;
wait=0;
}
}
/*-----------------------------------------------check_bend1----------------------------------------*/
void check_bend1(void){ //检测左弯道
cnt2++;
if(cnt2>1){
bend_fl++;
if(bend_fl>200){
bend_fl=3;
}
cnt1=cnt2=cnt3=flag1=flag3=0;
flag2=1;
}
}
/*----------------------------------------------check_bend2-----------------------------------------*/
void check_bend2(void){ //检测右弯道
cnt3++;
if(cnt3>1){
bend_fl++;
if(bend_fl>200){
bend_fl=3;
}
cnt1=cnt2=cnt3=flag1=flag2=0;
flag3=1;
}
}
/*---------------------------------------------C_COMP1-------------------------------------------------*/
void pid_c(unsigned int v){
ek=v-mk;
ppk=kp*ek;
pdk=kd*(ek-ek_1);
if(pk_1>uplimit){
if(ek<=0){
pik=ek*ki+pik_1;
}
}else if(pk_1<downlimit){
if(ek>=0){
pik=ek*ki+pik_1;
}
} else {
pik=ek*ki+pik_1;
}
pk=ppk+pik+pdk;
if(pk>uplimit){
dripwm=uplimit;
}
else if(pk<downlimit){
dripwm=downlimit;
}
else {
dripwm=pk;
}
ek_1=ek;
pik_1=pik;
pk_1=pk;
}
/*____________________________________________chang_f1_____________________________________________*/
/*_____________________________________________comp1________________________________________________*/
void c_comp1(void){
clock++; //延时累加位(当CLOCK的值小于规定值时一直处于刹车状态)
if(limit1<sam_atd_g[0]){
if(limit1<sam_atd_g[1]){
front=13;
chang_f();
}
if(limit1<sam_atd_g[8]){
front=15;
chang_f();
}
front=14;
chang_f();
} else if(limit1<sam_atd_g[1]){
if(limit1<sam_atd_g[2]){
front=11;
chang_f();
}
front=12;
chang_f();
}else if(limit1<sam_atd_g[8]){
if(limit1<sam_atd_g[9]){
front=17;
chang_f();
}
front=16;
chang_f();
}else if(limit1<sam_atd_g[2]){
if(limit1<sam_atd_g[3]){
front=9;
chang_f();
}
front=10;
chang_f();
}else if(limit1<sam_atd_g[9]){
if(limit1<sam_atd_g[10]){
front=19;
chang_f();
}
front=18;
chang_f();
}else if(limit1<sam_atd_g[3]){
if(limit1<sam_atd_g[4]){
front=7;
chang_f();
}
front=8;
chang_f();
}else if(limit1<sam_atd_g[10]){
if(limit1<sam_atd_g[11]){
front=21;
chang_f();
}
front=20;
chang_f();
}else if(limit1<sam_atd_g[4]){
if(limit1<sam_atd_g[5]){
front=5;
chang_f();
}
front=6;
chang_f();
}else if(limit1<sam_atd_g[11]){
if(limit1<sam_atd_g[12]){
front=23;
chang_f();
}
front=22;
chang_f();
}else if(limit1<sam_atd_g[5]){
if(limit1<sam_atd_g[6]){
front=3;
chang_f();
}
front=4;
chang_f();
}else if(limit1<sam_atd_g[12]){
if(limit1<sam_atd_g[13]){
front=25;
chang_f();
}
front=24;
chang_f();
}else if(limit1<sam_atd_g[6]){
if(limit1<sam_atd_g[7]){
front=1;
//check_bend1();
chang_f();
}
front=2;
chang_f();
}else if(limit1<sam_atd_g[13]){
if(limit1<sam_atd_g[14]){
front=27;
//check_bend2();
chang_f();
}
front=26;
chang_f();
}else if(limit1<sam_atd_g[7]){
front=0;
chang_f();
}else if(limit1<sam_atd_g[14]){
front=28;
chang_f();
}
}
/*---------------------------------------------_ECTISR----------------------------------------------*/
// this is the RTI interrupt rountine.每隔一定时间中断一次,以调用PID程序检测及改变速度.
#pragma CODE_SEG NON_BANKED
interrupt void _ectisr(void)
{ mk=PACN10;
if(bend_fl!=2){ //////////////如若标志位BEND_FL不为2(即不处于刹车状态时)才调用速度改变函数
pid_c(check_v);
PWMDTY7=dripwm;
}
PACN10=0x0000;
MCCNT=60000;
MCFLG=0x80;
}
#pragma CODE_SEG DEFUALT
/*........................................................................................................*/
/*........................................................................................................*/
/*--------------------------------------------------------------------------------------------------------*-
-------------------------------------THE END OF FILE-----------------------------------------------------
-*--------------------------------------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -