📄 fuzzy.c
字号:
#define VEL_VSLOW 0x00
#define VEL_SLOW 0x01
#define VEL_MEDIUM 0x02
#define VEL_FAST 0x04
#define VEL_VFAST 0x08
#define DIST_VCLOSE 0x10
#define DIST_CLOSE 0x20
#define DIST_NEAR 0x40
#define DIST_FAR 0x80
#define BRAKE_NONE 0x00
#define BRAKE_LIGHT 0x50
#define BRAKE_MEDIUM 0xa0
#define BREKE_HARD 0xc0
#define BRAKE_VHARD 0xff
typedef struct{
unsigned char Speed;
unsigned char Distance;
unsigned char Out;
}FUZZYLOGIC;
const FUZZYLOGIC FuzzyTable[20]={
VEL_VSLOW, DIST_VCLOSE, BRAKE_LIGHT,
VEL_VSLOW, DIST_CLOSE, BRAKE_NONE,
VEL_VSLOW, DIST_NEAR, BRAKE_NONE,
VEL_VSLOW, DIST_FAR, BRAKE_NONE,
VEL_SLOW, DIST_VCLOSE, BRAKE_MEDIUM,
VEL_SLOW, DIST_CLOSE, BRAKE_LIGHT,
VEL_SLOW, DIST_NEAR, BRAKE_NONE,
VEL_SLOW, DIST_FAR, BRAKE_NONE,
VEL_MEDIUM, DIST_VCLOSE, BRAKE_HARD,
VEL_MEDIUM, DIST_CLOSE, BRAKE_HARD,
VEL_MEDIUM, DIST_NEAR, BRAKE_MEDIUM,
VEL_MEDIUM, DIST_FAR, BRAKE_LIGHT,
VEL_FAST, DIST_VCLOSE, BRAKE_VHARD,
VEL_FAST, DIST_CLOSE, BRAKE_VHARD,
VEL_FAST, DIST_NEAR, BRAKE_HARD,
VEL_FAST, DIST_FAR, BRAKE_MEDIUM,
VEL_VFAST, DIST_VCLOSE, BRAKE_VHARD,
VEL_VFAST, DIST_CLOSE, BRAKE_VHARD,
VEL_VFAST, DIST_NEAR, BRAKE_HARD,
VEL_VFAST, DIST_FAR, BRAKE_MEDIUM
};
FUZZYLOGIC Fuzzy;
void main(void)
{
HardInit();
SoftInit();
while(1){
SystemHandle();
if(Timer1SFlag){
Timer1SFlag=0;
Fuzzy.Speed=SpeedSamle();
Fuzzy.Distance=DistanceSample();
Fuzzy.Speed=Fuzzy.Speed/25;
Fuzzy.Distance=Fuzzy.Distance/50;
for(uc0=0;uc0<20;uc0++){
if(Fuzzy.Speed!=FuzzyTable[uc0].Speed) continue;
if(Fuzzy.Distance!=FuzzyTable[uc0].Distance) continue;
Output=FuzzyTable[uc0].Out;
break;
}
}
switch(State){
case 0:
break;
case 1:
break;
default:break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -