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

📄 robot_function.c

📁 智能语音识别避障机器人 // 语音识别+机器人+超声波测距综合应用方案 // 采用特定人识别技术
💻 C
📖 第 1 页 / 共 2 页
字号:
		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 + -