⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 last.txt

📁 飞思卡儿智能汽车竞赛主程序 包含刹车程序和pmw模块程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
        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 + -