YS-LDV7语音模块修改命令方法


接线

主机<——————> 语音模块
5V <———————> 5V
tx <———————> rx
rx <———————> tx
gnd<——————> gnd

验货测试方法

  • 口令模式需要先按一级口令, 识别成功后才能继续喊二级口令以此 循环。 内部默认的口令如下:

    一级口令: 小杰
    二级口令: 代码测试
    开发板验证
    开灯
    关灯
    北京
    上海
    广州
    
  • 详细测试流程如下:

    • 首先在电脑上安装“USB 转 TTL 驱动
    • 根据以上串口连接图将 USB 转 TTL 模块与语音模块连接好
    • 插入电脑 USB 口(注意不要加 USB 延长线直接插到主机的 USB 口)
    • 打开“STC-ISP 下载软件” 里面的串口助手, 根据下图选择好各个选项: (其中串口号可通关查看–我的电脑–设备管理器–端口)
      在这里插入图片描述

配套程序识别语句修改方法

1.添加关键词和识别码

  • 打开程序工程, 在 LDChip.C 文件中找到uint8 LD_AsrAddFixed() 函数, 在该
    函数里面可以找到如下图所示内容:
/************************************************************************
功能描述: 向LD模块添加关键词
入口参数: none
返 回 值: flag:1->添加成功
其他说明: 用户修改.
					 1、根据如下格式添加拼音关键词,同时注意修改sRecog 和pCode 数组的长度
					 和对应变了k的循环置。拼音串和识别码是一一对应的。
					 2、开发者可以学习"语音识别芯片LD3320高阶秘籍.pdf"中
           关于垃圾词语吸收错误的用法,来提供识别效果。
					 3、”xiao jie “ 为口令,故在每次识别时,必须先发一级口令“小捷”
**************************************************************************/
uint8 LD_AsrAddFixed()
{
	uint8 k, flag;
	uint8 nAsrAddLength;
	#define DATE_A 50   /*数组二维数值*/
	#define DATE_B 70		/*数组一维数值*/
	uint8 code sRecog[DATE_A][DATE_B] = {
																				"xiao jie",\		
																				"kai fa ban yan zheng",\
																				 "dai ma ce shi",\
																				 "kai deng",\
																				 "guan deng",\
																				 "bei jing",\
																				 "shang hai",\
																				 "guang zhou"
																			};	/*添加关键词,用户修改*/
	uint8 code pCode[DATE_A] = {
															CODE_CMD,\
															CODE_KFBYZ,\
															CODE_DMCS,\
															CODE_KD,\
															CODE_GD,\
															CODE_BJ,\
															CODE_SH,\
															CODE_GZ
														 };	/*添加识别码,用户修改*/	
	flag = 1;
	for (k=0; k<DATE_A; k++)
	{
			
		if(LD_Check_ASRBusyFlag_b2() == 0)
		{
			flag = 0;
			break;
		}
		
		LD_WriteReg(0xc1, pCode[k] );
		LD_WriteReg(0xc3, 0 );
		LD_WriteReg(0x08, 0x04);
		delay(1);
		LD_WriteReg(0x08, 0x00);
		delay(1);

		for (nAsrAddLength=0; nAsrAddLength<DATE_B; nAsrAddLength++)
		{
			if (sRecog[k][nAsrAddLength] == 0)
				break;
			LD_WriteReg(0x5, sRecog[k][nAsrAddLength]);
		}
		LD_WriteReg(0xb9, nAsrAddLength);
		LD_WriteReg(0xb2, 0xff);
		LD_WriteReg(0x37, 0x04);
	}
    return flag;
}
  • 根据关键词的数量和长度修改宏定义 DATE_A 和 DATE_B ,例如您要添加 10 个关键词, 在这些关键词中最长的一句长度为 30,那么定义如下:

    #define DATE_A 10
    #define DATE_B 30
    
  • sRecog[ ][ ] 数组为关键词数组, 添加内容为拼音输入方式, 例如想添加 “开灯” 命令, 则写入“kai deng” ,每个汉字间的拼音用空格隔开。

  • pCode[ ] 数组为识别码数组, 所添加的识别码为预先定义好的宏定义常量值, 同时必须和关键词一一对应, 如上图所示, “da ma ce shi” 命令对应的识别码为 CODE_DMC。

2.定义识别码

  • 打开程序, 在 LDChip.h 文件中找到如下图所示内容:

    //识别码客户修改处 
    #define CODE_CMD  0x00   //该命令码0x00用户不可进行修改。
    #define CODE_DMCS	0x01		//代码测试
    #define CODE_KFBYZ	0x02	//开发板验证
    #define CODE_KD 0x04			//开灯
    #define CODE_GD 0x05			//关灯
    #define CODE_BJ 0x16			//关灯
    #define CODE_SH 0x17			//上海
    #define CODE_GZ	0x2f			//广州	
    
  • 此处即为识别码的添加和修改, 用户可以根据自己的需要和喜好任意定义识别码和宏名, 但必须和前面所使用的识别码配对, 否则会提示未定义错误。 识别码的参数范围为 01-FF 随意选择, 没有具体意义, 只要不存在重复的即可。

3.修改处理函数

  • 打开程序, 在 main.c 文件中找到 void User_handle(uint8 dat) 函数, 在该函数
    中可以看到如下图所示内容:
void 	User_handle(uint8 dat)
{
     //UARTSendByte(dat);//串口识别码(十六进制)
		 if(0==dat)
		 {
		  	G0_flag=ENABLE;
			LED=0;
			PrintCom("收到\r\n"); /*text.....*/
		 }
		 else if(ENABLE==G0_flag)
		 {	
		 		G0_flag=DISABLE;
				LED=1;
			 switch(dat)		   /*对结果执行相关操作,客户可删除Printcom 串口输出语句替换为其他需要控制的代码*/
			  {
				  case CODE_DMCS:			/*命令“测试”*/
						PrintCom("“代码测试”命令识别成功\r\n"); /*text.....*/
													 break;
					case CODE_KFBYZ:	 /*命令“全开”*/
						PrintCom("“开发板验证”命令识别成功\r\n"); /*text.....*/
													 break;
					case CODE_KD:		/*命令“复位”*/				
						PrintCom("“开灯”命令识别成功\r\n"); /*text.....*/
													break;
					case CODE_GD:		/*命令“复位”*/				
						PrintCom("“关灯”命令识别成功\r\n"); /*text.....*/
													break;
					case CODE_BJ:		/*命令“复位”*/				
						PrintCom("“北京”命令识别成功\r\n"); /*text.....*/
													break;
					case CODE_SH:		/*命令“复位”*/				
						PrintCom("“上海”命令识别成功\r\n"); /*text.....*/
													break;
					case CODE_GZ:		/*命令“复位”*/				
						PrintCom("“广州”命令识别成功\r\n"); /*text.....*/
													break;																											
							default:PrintCom("请重新识别发口令\r\n"); /*text.....*/break;
				}	
			}	
			else 	
			{
				PrintCom("请说出一级口令\r\n"); /*text.....*/	
			}
}	 
  • 用户可以根据自己的使用情况在相对应的识别码后添加识别成功后的操作。那么在设备到某句话后就会执行相应的动作, 实际上此段程序是判断 识别到那个识别码然后执行相应的动作, 属单片机的程序应用处理部分。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

money的大雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值