📄 robot_function.c
字号:
uiP_IOA_Dir |= 0x2200; //改变IOA9、IOA13位
uiP_IOA_Attrib |= 0x2200;
uiP_IOA_Data |= 0x2200;
*P_IOA_Dir = uiP_IOA_Dir; //设置IOA9、IOA13为高电平输出
*P_IOA_Attrib = uiP_IOA_Attrib; //其它IO口不变
*P_IOA_Data = uiP_IOA_Data;
PlaySnd(D27, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
RobotSystemInit();
uiP_IOA_Dir = *P_IOA_Dir; //读回IOA口的状态值
uiP_IOA_Attrib = *P_IOA_Attrib;
uiP_IOA_Data = *P_IOA_Data;
uiP_IOA_Dir |= 0x4800; //改变IOA11、IOA14位
uiP_IOA_Attrib |= 0x4800;
uiP_IOA_Data |= 0x4800;
*P_IOA_Dir = uiP_IOA_Dir; //设置IOA11、IOA14为高电平输出
*P_IOA_Attrib = uiP_IOA_Attrib; //其它IO口不变
*P_IOA_Data = uiP_IOA_Data;
PlaySnd(D28, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
RobotSystemInit();
uiP_IOA_Dir = *P_IOA_Dir; //读回IOA口的状态值
uiP_IOA_Attrib = *P_IOA_Attrib;
uiP_IOA_Data = *P_IOA_Data;
uiP_IOA_Dir |= 0x0200; //改变IOA9位
uiP_IOA_Attrib |= 0x0200;
uiP_IOA_Data |= 0x0200;
*P_IOA_Dir = uiP_IOA_Dir; //设置IOA9为高电平输出
*P_IOA_Attrib = uiP_IOA_Attrib; //其它IO口不变
*P_IOA_Data = uiP_IOA_Data;
PlaySnd(D29, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
RobotSystemInit();
}
RobotSystemInit();
}
//========================================================================
// 语法格式: void Robot_Dance(unsigned int n)
// 实现功能: 跳舞
// 参数: n - 循环跳舞次数
// 返回值: 无
//========================================================================
void Robot_Dance(unsigned int n)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < n;uiCount++)
{
Set_IOA_Bit(11,1,1,1,1);
PlaySnd(MUSIC1, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(11,1,1,0,0);
Set_IOA_Bit(9,1,1,1,1);
PlaySnd(MUSIC2, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(9,1,1,0,0);
Set_IOA_Bit(11,1,1,1,1);
Set_IOA_Bit(9,1,1,1,1);
PlaySnd(MUSIC3, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(11,1,1,0,0);
Set_IOA_Bit(9,1,1,0,0);
Set_IOA_Bit(13,1,1,1,1);
PlaySnd(MUSIC4, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(13,1,1,0,0);
Set_IOA_Bit(14,1,1,1,1);
Set_IOA_Bit(9,1,1,1,1);
PlaySnd(MUSIC4, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(9,1,1,0,0);
Set_IOA_Bit(8,1,1,1,1);
Set_IOA_Bit(11,1,1,1,1);
Set_IOA_Bit(14,1,1,1,1);
Delay(400);
RobotSystemInit();
}
RobotSystemInit();
}
//========================================================================
// 语法格式: void Robot_Go(unsigned int n)
// 实现功能: 前进
// 参数: n - 前进步数控制
// 返回值: 无
//========================================================================
void Robot_Go(unsigned int n)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < n;uiCount++)
{
Set_IOA_Bit(9,1,1,1,1);
PlaySnd(WALK, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(9,1,1,0,0);
Set_IOA_Bit(11,1,1,1,1);
Delay(2000);
PlaySnd(WALK, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(9,1,1,1,1);
Set_IOA_Bit(11,1,1,0,0);
Delay(2000);
PlaySnd(WALK, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(9,1,1,0,0);
Set_IOA_Bit(11,1,1,1,1);
Delay(2000);
PlaySnd(WALK, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(9,1,1,1,1);
Set_IOA_Bit(11,1,1,0,0);
Delay(2000);
PlaySnd(WALK, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(9,1,1,0,0);
Set_IOA_Bit(11,1,1,1,1);
Delay(2000);
PlaySnd(WALK, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(9,1,1,1,1);
Set_IOA_Bit(11,1,1,0,0);
Delay(2000);
PlaySnd(WALK, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(9,1,1,0,0);
Set_IOA_Bit(11,1,1,1,1);
Delay(2000);
RobotSystemInit();
}
RobotSystemInit();
PlaySnd(WALK, 1);
}
//========================================================================
// 语法格式: void Robot_Backup(unsigned int n)
// 实现功能: 后退
// 参数: n - 后退步数控制
// 返回值: 无
//========================================================================
void Robot_Backup(unsigned int n)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < n;uiCount++)
{
Set_IOA_Bit(8,1,1,1,1);
PlaySnd(WALK, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(8,1,1,0,0);
Set_IOA_Bit(10,1,1,1,1);
Delay(2000);
PlaySnd(WALK, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(8,1,1,1,1);
Set_IOA_Bit(10,1,1,0,0);
Delay(2000);
PlaySnd(WALK, 0);
if(Robot_CheckEnemy() == -1) //在语音播放期间进行超声波测距
return; //如果发现障碍物则退出动作执行
Set_IOA_Bit(8,1,1,0,0);
Set_IOA_Bit(10,1,1,1,1);
Delay(2000);
RobotSystemInit();
}
RobotSystemInit();
PlaySnd(WALK, 1);
}
//========================================================================
// 语法格式: void Robot_TurnRight(unsigned int n)
// 实现功能: 右转
// 参数: n - 右转步数控制
// 返回值: 无
//========================================================================
void Robot_TurnRight(unsigned int n)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < n;uiCount++)
{
Set_IOA_Bit(9,1,1,1,1);
Set_IOA_Bit(10,1,1,1,1);
PlaySnd(WALK, 1);
Delay(2000);
RobotSystemInit();
}
}
//========================================================================
// 语法格式: void Robot_TurnLeft(unsigned int n)
// 实现功能: 左转
// 参数: n - 左转步数控制
// 返回值: 无
//========================================================================
void Robot_TurnLeft(unsigned int n)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < n;uiCount++)
{
Set_IOA_Bit(8,1,1,1,1);
Set_IOA_Bit(11,1,1,1,1);
PlaySnd(WALK, 1);
Delay(2000);
RobotSystemInit();
}
}
//========================================================================
// 语法格式: void Robot_HeadTurnLeft(unsigned int n)
// 实现功能: 向左瞄准
// 参数: n - 转头幅度控制
// 返回值: 无
//========================================================================
void Robot_HeadTurnLeft(unsigned int n)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < n; uiCount++)
{
Set_IOA_Bit(13,1,1,1,1);
PlaySnd(TURNHEAD, 1);
Delay(200);
RobotSystemInit();
}
}
//========================================================================
// 语法格式: void Robot_HeadTurnRight(unsigned int n)
// 实现功能: 向右瞄准
// 参数: n - 转头幅度控制
// 返回值: 无
//========================================================================
void Robot_HeadTurnRight(unsigned int n)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < n;uiCount++)
{
Set_IOA_Bit(14,1,1,1,1);
PlaySnd(TURNHEAD, 1);
Delay(200);
RobotSystemInit();
}
}
//========================================================================
// 语法格式: void Robot_Shoot_Prepare(unsigned int n)
// 实现功能: 发射准备函数
// 参数: n - 咚咚声提示音播放次数
// 返回值: 无
//========================================================================
void Robot_Shoot_Prepare(unsigned int n)
{
unsigned int uiCount;
Set_IOA_Bit(7,1,1,1,1);
for(uiCount = 0;uiCount < n;uiCount++)
{
PlaySnd(SHOOT, 1);
Delay(200);
}
}
//========================================================================
// 语法格式: void Robot_Shoot2(unsigned int n)
// 实现功能: 连续发射
// 参数: n - 发射飞盘个数控制
// 返回值: 无
//========================================================================
void Robot_Shoot2(unsigned int n)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < n;uiCount++)
{
Set_IOA_Bit(15,1,1,1,1);
PlaySnd(GUN, 1);
Delay(200);
}
RobotSystemInit();
}
//========================================================================
// 语法格式: void Robot_Shoot_Five(unsigned int n)
// 实现功能: 发射
// 参数: n - 发射飞盘个数控制
// 返回值: 无
//========================================================================
void Robot_Shoot_Five(unsigned int n)
{
unsigned int uiCount1;
unsigned int uiCount2;
for(uiCount1 = 0;uiCount1 < n;uiCount1++)
{
for(uiCount2 = 0;uiCount2 < 5;uiCount2++)
{
Set_IOA_Bit(15,1,1,1,1);
PlaySnd(GUN, 1);
Delay(200);
}
}
RobotSystemInit();
}
//========================================================================
// 语法格式: void Robot_CheckEnemy(void)
// 实现功能: 检测前方是否有障碍物
// 参数: 无
// 返回值: 0 - 没有检测到障碍物
// 1 - 检测到障碍物
//========================================================================
extern unsigned int uiTim; // 4096Hz计数器
unsigned int uiEnemy[MaxStorageNumber]; // 存储最近几次的测量值
unsigned int uiEnemyIndex; // 当前测量值的存储位置
int Robot_CheckEnemy()
{
unsigned long int ulTemp;
unsigned int uiTemp;
int iTemp;
while(GetPlayStatus() != plNULL)
{ //在背景音乐播放完毕之前,周期性进行障碍物检测
if((uiTim & 0x007f) == 0) // 4096Hz中断进行128分频。大约31.25ms测量一次
{
//储存测量结果
uiEnemy[uiEnemyIndex] = measure_ult(0);
ulTemp = 0;
iTemp = 0;
for(uiTemp = 0; uiTemp < MaxStorageNumber; uiTemp++)
{
if(uiEnemy[uiTemp] != 0)
{
ulTemp += uiEnemy[uiTemp];
iTemp++;
}
}
//取得最近几次的测量结果的平均值
if(iTemp == 0)
uiTemp = 0;
else
uiTemp = (unsigned int)(ulTemp / iTemp);
//决策测量结果
if((uiTemp >= TypeDistanceValue) && (uiTemp <= MaxDistance))
{ //发现Enemy
RobotSystemInit(); //停止当前动作
PlaySnd(HO, 1);
PlaySnd(HOO, 1);
PlaySnd(HO, 1);
PlaySnd(HOO, 1);
Robot_Shoot_Prepare(5); //发射
Delay(1500);
Robot_Shoot2(3);
PlaySnd(YEAH, 1);
return -1;
}
//调整存储位置
uiEnemyIndex++;
if(uiEnemyIndex >= MaxStorageNumber)
uiEnemyIndex = 0;
}
}
ClearPlayService();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -