📄 control.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 + -