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

📄 control.h

📁 这是本人参加FREESCAL最牛的智能小车程序
💻 H
字号:
 #define  uchar   unsigned char
/**************路况相关变量定义****************///
#define curve_s     1        //small  curve
#define curve_b     2
#define s_like      3
#define big_curve   4
#define line        5
/******************SPEED MACRO****************///
 #define  line_speed   36      //  big  speed
 #define  slike_speed   30
 #define  sc_speed   25
 #define  bc_speed   18
/*****************函数申明*****************///
void curve_just(void);
void encode_fuzzy(void);
void road_just(void);
void fuzzy_just(void);
void speed_control(void);
void st_change(void);
void check_start(void);
/*****************变量定义***********************////
uchar sensor,uptime=0,last_sensor;       // pulsecnt测速脉冲
uchar cur_speed=0,set_speed;
uchar e[3]={0},speed_flag=0,stop=0,stop_flag=0,counter;            //keep the recent 3 speed
uint pulsecnt=0;
signed char SE,ME,SET,MET,last_SE = 0,road_state;           // SE=E;ME=^E
signed char store_SE[10]={0};             // 保存SE的值用于判断路况
uint pulse[2]={0};                         //PACN1 DATA ARRAY
signed char  EK=0,ekt=0,DEK=0,dekt=0,d_angel=0,last_SET=0,last_EK=0;          // arithmatic control factors
signed char NB,NS,ZO,PS,PB,servo;
uint temp_speed; 
signed int car_move,just_s=0;       
uchar  just_flag=0,SE_cnt=0,last_state,time=0;
/*-----------------SERVO CONTORL FUZZY TABLE-------------------------------*/
  signed char line_td[3][23]=       //FUZZY TABLE  2
  {
   6,6,6,6,5,4,3,2,0,0,0,0,0,0,0,0,-1,-2,-4,-5,-6,-6,-6,
   6,6,6,6,5,4,2,0,0,0,0,0,0,0,-1,-2,-4,-5,-6,-6,-6,-6,-6,
   6,6,6,5,4,3,2,0,0,0,0,0,0,-1,-2,-4,-5,-6,-6,-6,-6,-6,-6
  };
  signed char curve_std[3][23]=       //FUZZY TABLE  2
  {
   6,6,6,6,5,5,4,3,2,1,0,0,0,0,0,-1,-2,-3,-4,-5,-6,-6,-6,
   6,6,6,6,5,4,3,2,1,0,0,0,0,-1,-2,-3,-4,-5,-6,-6,-6,-6,-6,
   6,6,6,5,4,3,2,1,0,0,0,0,-1,-2,-3,-4,-5,-6,-6,-6,-6,-6,-6
  };
  signed char curve_btd[3][23]=      //curve_s=1
  {
   6,6,6,6,5,5,5,4,3,1,0,0,0,-1,-1,-2,-3,-3,-5,-5,-6,-6,-6, 
   6,6,6,5,5,4,4,3,3,2,0,0,0,-2,-2,-2,-3,-4,-5,-5,-6,-6,-6,
   6,6,5,5,4,4,3,2,2,1,0,0,-1,-2,-3,-4,-5,-6,-6,-6,-6,-6,-6
  };
  signed char s_liketd[3][23]=       //s_like=3
  {
   6,6,6,6,5,4,3,2,1,0,0,0,0,0,0,0,-1,-2,-3,-4,-5,-6,-6,
   6,6,6,5,4,3,2,1,0,0,0,0,0,0,0,-1,-2,-3,-4,-5,-6,-6,-6,
   6,6,5,4,3,2,1,0,0,0,0,0,0,0,-1,-2,-3,-4,-5,-6,-6,-6,-6
  };
/*********************Sensor_Read*********************************////
void sensor_read(void)
{ 
  if(PTM_PTM1==1) sensor = PORTAD0;
  else sensor=PORTA;
  PORTB=sensor;
}  
/*--------------------INIT_ALL----------------------*/
void init_all()
  {
   init_pwm();
   port_init();        //input:PA,PH; out: PB,PWM,AD0,1
   timer_init();       //main timer init
   IC1_init();         //PT1 init to measure speed
   init_RTI();         //RTI set time to check sensors
   SciInit();        // sci
  }
 /*--------------------control_all------------------*/
 void control_all()
 {
  sensor_read();
  //check_start();
  fuzzy_just();                                             //fuzzy just
  road_just() ;
  st_change();
 }
/*****************delay()*******************////
void delay(uint i)
{
i=i*8;
while(i--);
}

/*---------road state changing and the speed converted--------*/
void st_change() 
{
  if((last_state==line||last_state==s_like)&&(road_state==curve_b)) 
    {
    set_speed =8; 
    //PWMDTY01=73*curve_btd[MET][SET]+1100;
    //delay(50);
    }
  if((last_state==line)&&(road_state==curve_s)) 
  {
    set_speed = 10;
    //PWMDTY01=72*curve_btd[MET][SET]+1100;
  }
  //delay(8);
}
/*-------------------check start -----------------------------*/
void check_start()
{
 /*switch (PORTAD0) 
    {
     // case 0xFC :  stop = 1;      break;    //L11,L12
      //case 0x3F :  stop = 1;      break;    //L1;L2
      case 0X3C :  stop = 1;      break;    //L1,L2,L11,L12
      case 0X1F :  stop = 1;      break;    //L1,L2,L3
      case 0X8F :  stop = 1;      break;    // L2,L3,L4
    }   */
 if((PORTAD0==0xFC||PORTAD0==0x3F)&&PORTB!=0x00) stop=1;                     //L11,L12-- L1;L2  
 if((PORTAD0==0x3C)&&PORTB!=0x00)                stop=1;                     //L1,L2,L11,L12
 if(((PORTAD0==0x3C&&PORTB_BIT7==0)&&PORTB_BIT6==0)&&PORTB!=0x00) 
      stop=1;    //L1,L2,L3,L4
 if(((PORTAD0_PTAD1==0&&PORTB_BIT7==0)&&PORTB_BIT6==0)&&PORTB!=0x00) 
      stop=1; //L2,L3,L4
 if(((PORTAD0==0xFC&&PORTB_BIT0==0)&&PORTB_BIT1==0)&&PORTB!=0x00) 
      stop=1;    //L11,L12,L10,L9
 if((PORTAD0==0xFC&&PORTB_BIT0==0)&&PORTB!=0x00) 
      stop=1;                     //L11,L12,L10
 if(((PORTAD0_PTAD2==0&&PORTB_BIT0==0)&&PORTB_BIT1==0)&&PORTB!=0x00) 
      stop=1; //L11,L10,L9
 if(stop==1)  stop_flag++;
 while(stop_flag>=3)   PWMDTY2=0;
}
/*************SPEED GET FUNC*****************************/// 
void speed_get(void) 
{  
  counter++; 
  temp_speed = PACN1;  //1  lap
  cur_speed = temp_speed-pulse[counter-1];       // cur_speed signed???
  pulse[counter-1] = temp_speed; 
 if(counter>=1) 
  { 
  counter=0; 
  }
  speed_control();
}


















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -