📄 main.c
字号:
{
Delay();
}
}
*P_IOB_Data=0x0000;
}
//=============================================================
// 语法格式: void TurnRight();
// 实现功能: 右转子函数
// 参数: 无
// 返回值: 无
//=============================================================
void TurnRight() //右转
{
unsigned int i,j;
for(j=0;j<20;j++)
{
*P_IOB_Data=0x0900;
Delay();
*P_IOB_Data=0x0000;
for(i=0;i<4;i++)
{
Delay();
}
}
*P_IOB_Data=0x0000;
}
//=============================================================
// 语法格式: void Stop();
// 实现功能: 停车子函数
// 参数: 无
// 返回值: 无
//=============================================================
void Stop() //停车
{
*P_IOB_Data=0x0000; //停车
PlaySnd(S_RDY,3); //语音提示
}
//=============================================================
// 语法格式: void Line();
// 实现功能: 循线子函数
// 参数: 无
// 返回值: 无
//=============================================================
void Line() //循线
{
int flag = 0;
//unsigned int j;
PlaySnd(S_ACT1,3); //延时
while(flag == 0)
{
stated = nowstate;
nowstate=*P_IOB_Data;
nowstate&=0x0030;
switch(nowstate)
{
case 0x0030: //左边和右边都有反射信号,小车应该前进
{
flag = 1;
} break;
case 0x0020: //左边传感器有反射,右边传感器没有反射,小车右转
{
TurnRight();
} break;
case 0x0010: //右边传感器有反射,左边传感器没有反射,小车左转
{
TurnLeft();
} break;
case 0x0000: //左边和右边都没有反射信号,小车应该前进
{
GoAhead();
} break;
default :
break;
}
}
*P_IOB_Data=0x0000; //停车
PlaySnd(S_WANBI,3); //语音提示
}
//=============================================================
// 语法格式: void Circle();
// 实现功能: 画圆子函数
// 参数: 无
// 返回值: 无
//=============================================================
void Circle() //右转
{
unsigned int i,j,uiTimecont;
PlaySnd(S_ACT2,3); //延时
for(j=0;j<500;j++)
{
GoAhead();
//*P_IOB_Data=0x0300;
//Delay(); //延时
*P_IOB_Data=0x0200;
for(i=0;i<4;i++)
{
Delay(); //延时
}
}
*P_IOB_Data=0x0000; //停车
PlaySnd(S_WANBI,3); //语音提示
}
//=============================================================
// 语法格式: void Dingdian();
// 实现功能: 定点子函数
// 参数: 无
// 返回值: 无
//=============================================================
void Dingdian() //右转
{
float x = 0;
float y = 0;
int i,j,k,n,TurnTime;
float distancex,distancey;
float s,tgveual,jiaodu,RunTime,Temp;
int numxid[5] = {S_Twenty,S_FOURty,S_Sixty,S_Sevty,S_NINEty};
int numyid[5] = {S_Twenty,S_THREEty,S_FOURty,S_Sixty,S_Sevty};
float numx[6] = {0,20,40,60,70,90};
float numy[6] = {0,20,30,40,60,70};
float jiaodutemp[6];
jiaodutemp[0] = 0;
PlaySnd(S_ACT3,3); //延时
for(i=1;i<6;i++)
{
PlaySnd(S_OX,3); //延时
PlaySnd(numxid[i-1],3);
PlaySnd(S_OY,3); //延时
PlaySnd(numyid[i-1],3);
distancex = numx[i]-numx[i-1];
distancey = numy[i]-numy[i-1];
s = sqrtf(distancex*distancex+distancey*distancey);
RunTime = 2*s/speed;
tgveual = distancey/s;
jiaodu = acosf(tgveual);
jiaodutemp[i] = jiaodu;
//TurnTimes = OneTime*jiaodu
Temp = 20*(jiaodutemp[i] - jiaodutemp[i-1]);
TurnTime = (int)Temp;
if(Temp >0)
{
for(n=0;n<TurnTime;n++)
{
TurnRight();
}
*P_IOB_Data=0x0000;
for(j=0;j<4;j++)
{
Delay();
}
for(k=0;k<RunTime;k++)
{
GoAhead();
//Delay();
}
}
/*else if (jiaodu==0)
{
//GoAhead();
for(k=0;k<RunTime;k++)
{
GoAhead();
//Delay();
}
}*/
else
{
for(n=0;n<TurnTime;n++)
{
TurnLeft();
}
*P_IOB_Data=0x0000;
for(j=0;j<4;j++)
{
Delay();
}
for(k=0;k<RunTime;k++)
{
GoAhead();
//Delay();
}
}
*P_IOB_Data=0x0000;
for(j=0;j<4;j++)
{
Delay();
}
}
*P_IOB_Data=0x0000; //停车
PlaySnd(S_WANBI,3); //语音提示
}
//=============================================================
// 语法格式: void Zidong();
// 实现功能: 自动子函数
// 参数: 无
// 返回值: 无
//=============================================================
void Zidong() //右转
{
unsigned int i,j,obstacle;
PlaySnd(S_ACT4,3); //延时
for(j=0;j<2000;j++)
{
obstacle =*P_IOB_Data;
obstacle&=0x0008;
switch(obstacle)
{
case 0x0008:
{
GoAheadzd();
}
case 0x0000:
{
BackUp();
for(i=0;i<4;i++)
{
Delay();
}
TurnRight();
}
}
}
*P_IOB_Data=0x0000; //停车
PlaySnd(S_WANBI,3); //语音提示
}
//=============================================================
// 语法格式: void BSR(void);
// 实现功能: 辨识子函数
// 参数: 无
// 返回值: 无
//=============================================================
void BSR(void)
{
int Result; //辨识结果寄存
Result = BSR_GetResult(); //获得识别结果
if(Result>0) //有语音触发?
{
*P_IOB_Data=0x0000; //临时停车
switch(Result)
{
case NAME_ID: //识别出名称命令
Stop(); //停车待命
break;
case COMMAND_ACT1_ID: //识别出第一条命令
Line(); //执行动作一:循线
break;
case COMMAND_ACT2_ID: //识别出第二条命令
Circle(); //执行动作二:画圆
break;
case COMMAND_ACT3_ID: //识别出第三条命令
Dingdian(); //执行动作三:定点
break;
case COMMAND_ACT4_ID: //识别出第四条命令
Zidong(); //执行动作四:自动
break;
default:
break;
}
}
}
//=============================================================
// 语法格式: int main(void);
// 实现功能: 主函数
// 参数: 无
// 返回值: 无
//=============================================================
int main(void)
{
unsigned int BS_Flag; //Train标志位
*P_IOA_Dir=0xff00; //初始化IOA,IOA0~7下拉输入
*P_IOA_Attrib=0xff00;
*P_IOA_Data=0x0000;
*P_IOB_Dir = 0x0f00; //IOB8~IOB11设置为同相输出口
*P_IOB_Attrib = 0x0f00;
*P_IOB_Data=0x0000;
BSR_DeleteSDGroup(0); //初始化存储器RAM
BS_Flag=*(unsigned int *)0xf700; //读存储单元0xe000
if(BS_Flag==0xffff) //没有经过训练(0xe000内容为0xffff)
{
FormatFlash();
TrainSD(); //训练第一组
StoreSD(); //存储训练结果(语音模型)
}
else //经过训练(0xe000内容为0x0055)
{
LoadSD(); //语音模型载入识别器
}
PlaySnd(S_START,3); //开始识别提示
BSR_InitRecognizer(BSR_MIC); //初始化识别器
while(1)
{
BSR();
if((*P_IOA_Data)&0x0004) //是否重新训练
{
F_FlashErase(0xf700);
while(1);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -