当前位置:首页 > 智能车光电组程序
for(i=1;i SUM=SUM+heixianjilu_servo[i]; if(heixianjilu_servo[i]>MAX) MAX=heixianjilu_servo[i]; if(heixianjilu_servo[i] AVERAGE=SUM/lushu_servo; if((MAX-MIN)<=1) xiuzhengliang=0;//GotoDebug(); else xiuzhengliang=MAX-MIN; ///修正量,偏移差值的大小 //GotoDebug(); } ///****************************************************/// /////////////////////////速度程序///////////////////////// ///****************************************************/// void kongzhi_speed() { ui MAX; ui MIN; heixianjishu_speed=0;/////////////////计数器清零 MAX=heixianjilu_speed[0]; MIN=heixianjilu_speed[0]; for(i=1;i if(heixianjilu_speed[i]>MAX) MAX=heixianjilu_speed[i]; if(heixianjilu_speed[i] if((MAX-MIN)<=2) SPEED=fast; else if((MAX-MIN)<=3) SPEED=mid; else SPEED=speed; } //******************************************************** /////////////////////////记录黑线///////////////////////// //******************************************************** void jiluheixianweizhi_servo(ui k) { if(k==0) { heixianjilu_servo[0]=BLACKLINEUP; heixianjishu_servo++; } else if(k<(lushu_servo-1)) { if(heixianjilu_servo[k-1]!=BLACKLINEUP) { heixianjilu_servo[k]=BLACKLINEUP; heixianjishu_servo++; } } else { if(heixianjilu_servo[k-1]!=BLACKLINEUP) { heixianjilu_servo[k]=BLACKLINEUP; kongzhi_servo(); } } } ///////普通记录方式,速度控制 void jiluheixianweizhi_speed(ui k) { if(k==0) { heixianjilu_speed[0]=BLACKLINEUP; heixianjishu_speed++; } else if(k<(lushu_speed-1)) { if(heixianjilu_speed[k-1]!=BLACKLINEUP) { heixianjilu_speed[k]=BLACKLINEUP; heixianjishu_speed++; } } else { if(heixianjilu_speed[k-1]!=BLACKLINEUP) { heixianjilu_speed[k]=BLACKLINEUP; kongzhi_speed(); } } } //******************************************************** ///////////////////////起跑线处理///////////////////////// //******************************************************** void qipaoxianchuli_down(void) { qipaoxian=qipaoxian+1; for(;;) { yunsu(fast); caiji_down(); if(DOWN==0) PWMDTY01=3800; if(DOWN==1) PWMDTY01=4100; if(DOWN==2) PWMDTY01=4500; if(DOWN==3) PWMDTY01=490; if(DOWN==4) PWMDTY01=520; DOWN_former=DOWN; if(heidian_down==1) break; } } void shangpo() { for(;;) { if(flag_caijiwancheng==1) { flag_caijiwancheng=0;/////10路采集完成标志位清零 for(i=1;i<=10;i++) { LASER[i]=LASER_chucai[i]; } //////黑线提取 daoluxingcheng(); caiji_down(); if(DOWN==0) PWMDTY01=3500; if(DOWN==1) PWMDTY01=4000; if(DOWN==2) PWMDTY01=4500; if(DOWN==3) PWMDTY01=5000; if(DOWN==4) PWMDTY01=5500; DOWN_former=DOWN; if(heidian==1) { PWMDTY01=zhiturn[BLACKLINEUP]; break; } } yunsu(40); } } //******************************************************** ////////////////////////采集预值//////////////////////////// //******************************************************** void caiji_yuzhi(void) { ////////////对每一路的黑、白值赋初值 for(i=1;i<11;i++) { baixianbiaozhun[i] = 0; heixianbiaozhun[i] = 0xfff; } ////先打开第一组1/6 //M2 1 //M3 6 PTM=0b11110011; PORTA=0xff; EnableInterrupts; for(;;) { if(flag_caijiwancheng==1) { for(i=1;i<=10;i++) { LASER[i]=LASER_chucai[i]; } flag_caijiwancheng=0;/////10路采集完成标志位清零 for(i=1;i<11;i++) { ///////////每一路的黑线分别取到最小 ///////////每一路的白线分别取到最大值 if(LASER[i] } if(PORTK==8&&flag_caijiwancheng==1) /////采集最后一排图像后进行值的处理 { DisableInterrupts; //////////求出每路黑白均值 for(i=1;i<11;i++) { average[i]=(heixianbiaozhun[i]+baixianbiaozhun[i])*8/20; } break; }
共分享92篇相关文档