引言

这个计划到今天也就完成了,原本按照计划是要实行三步走策略:
1.TTS文字转语音模块的学习
2.LD3320 语音识别模块的学习
3.单片机吧两者结合起来

骚想法

在这里插入图片描述
之后浮现了一个骚想法:
我只接就把语音识别模块和语音识别摸块TX RX数据接口连接起来,这样子的话,语音识别模块识别的内容就之际输出给TTS文字转语音模块直接输出。这样子我的单片机就不用进行编程,直接负责电源的供给就行了。
在这里插入图片描述
就这样,当我学完LD3320语音识别模块我就大功告成了。
接下来就讲讲这个具体配置方法
在这里插入图片描述

配置方法

文字转语音模块:

在这里插入图片描述
我没有被修改过,因为我没有多的口,所以新主人也不知道怎么改,看到我,也就没什么欲望了。。。
我只是负责把连接我的串口打印的内容说出来,你要我说一,我就说一。我真的很老实,不过不知道为什么,我好像有点毛病,有些话说不好,比如:律师函,说的很模糊,不知道是什么。我也很无语呀,主任也没法给我改。
在这里插入图片描述
PS :主人:有点不太给力,感觉有好些词读错了,改不动,下次买个更好的。。。(依依不舍)

单片机:

在这里插入图片描述
我就只负责给你一个VCC和GND,其他不要问我,我什么都不知道。
在这里插入图片描述

PS:主人:这里的电源最好在设计的时候做好滤波,不然会干扰语音识别模块,导致语音识别模块一直重启。这块板子上的5V就没有做好滤波,导致语音模块一直重启。
还好语音模块支持3.3V的,接到了3.3V上去可以成功运行。
在这里插入图片描述

重头戏: 语音识别模块:

在这里插入图片描述

我里面的程序是这样的

下面展示一些 内联代码片

/***********************************************************
* 名    称:用户执行函数 
* 功    能:识别成功后,执行动作可在此进行修改 
* 入口参数: 无 
* 出口参数:无
* 说    明: 通过控制PAx端口的高低电平,从而控制外部继电器的通断					 
**********************************************************/
void 	User_handle(uint8 dat)
{
     //UARTSendByte(dat);//串口识别码(十六进制)
		 if(0==dat)
		 {
		  	G0_flag=ENABLE;
				LED=0;
		 }
		 else if(ENABLE==G0_flag)
		 {	
		 		G0_flag=DISABLE;
				LED=1;
			 switch(dat)		   /*对结果执行相关操作,客户修改*/
			  {
						case CODE_CMD:			/*命令“测试”*/
						PrintCom("什么事情,你这菜鸡\r\n"); //串口输出提示信息(可删除)
						PA1=1;//让PA1端口为高电平
													 break;
					
				  case CODE_DMCS:			/*命令“测试”*/
						PrintCom("当然,我是爱坤\r\n"); //串口输出提示信息(可删除)
						PA1=1;//让PA1端口为高电平
													 break;
					case CODE_KFBYZ:	 /*命令“全开”*/
						PrintCom("法克,你说什么,你这是诽谤,污蔑无中生有暗度陈仓忙天过海\r\n");//串口输出提示信息(可删除)
						PA2=1;//让PA2端口为高电平
													 break;
					case CODE_KD:		/*命令“复位”*/				
						PrintCom("`收到过律师信吗\r\n"); //串口输出提示信息(可删除)
						PA3=1;//让PA3端口为高电平 
													break;
					case CODE_GD:		/*命令“复位”*/				
						PrintCom("`唱,跳,略,打篮球\r\n"); //串口输出提示信息(可删除)
						PA3=0;//让PA3端口为低电平
													break;
					case CODE_BJ:		/*命令“复位”*/				
						PrintCom("鸡 你太美,鸡 鸡 你太没,咚咚咚咚,级 你太美!你看着碗面他 及你太美\r\n"); //串口输出提示信息(可删除)
						PA4=1;//让PA4端口为高电平
													break;
//					case CODE_SH:		/*命令“复位”*/				
//						PrintCom("“上海”命令识别成功\r\n"); //串口输出提示信息(可删除)
//						PA5=1;//让PA5端口为高电平
//													break;
//					case CODE_GZ:		/*命令“复位”*/				
//						PrintCom("“广州”命令识别成功\r\n"); //串口输出提示信息(可删除)
//						PA6=1;//让PA6端口为高电平
													break;																											
							default:PrintCom("我听不清楚,你是菜徐坤吗\r\n"); //串口输出提示信息(可删除)
													break;
				}	
			}	
			else 	
			{
				PrintCom("请说出一级口令\r\n"); //串口输出提示信息(可删除)	
			}
}	 

在这里插入图片描述
这里主要就修改这里,你要什么反馈,就修改对应的输出。
这个函数在main.c 里面;
接下来,还有一个你的语音输入修改:

下面展示一些 内联代码片

uint8 LD_AsrAddFixed()
{
	uint8 k, flag;
	uint8 nAsrAddLength;
	#define DATE_A 8   /*数组二维数值*/
	#define DATE_B 30		/*数组一维数值*/
	uint8 code sRecog[DATE_A][DATE_B] = {
																				"ai kun ji",\		
																				"ni zhi dao kun kun ma",\
																				 "ji ni tai mei",\
																				 "ni neng zen me yang",\
																				 "kun kun zui shan chang",\
																				 "zhu da ge shi sha",\
																				 "shang hai",\
																				 "guang zhou"
																			};	/*添加关键词,用户修改*/
	uint8 code pCode[DATE_A] = {
															CODE_CMD,\
															CODE_DMCS,\
															CODE_KFBYZ,\
															CODE_KD,\
															CODE_GD,\
															CODE_BJ,\
															CODE_SH,\
															CODE_GZ
														 };	/*添加识别码,用户修改*/	
	flag = 1;

函数位置:

在这里插入图片描述这个模块是采用拼音识别,所以你说的话就自己转化成拼音, 之后存放到数值B,在数值A有对应的代号,你在相应的修改。这个代号就是跟输出起到连接作用的,所以要注意了,保证正确,才不会答非所问,或者莫名其妙不回答。

计划完结

就这样三个配置好了,然后你连接就行。

最终效果

我:你知道kunkun吗?
TTS:当然,我是爱坤
我:鸡你太美
TTS:法克,你说什么,你这是诽谤,污蔑无中生有暗度陈仓忙天过海
我:你能做什么
TTS:收到过律师信吗
我:kunkun 最擅长什么?
TTS:唱,跳,略,打篮球
我:kunkun的主打哥是什么
TTS:鸡 你太美,鸡 鸡 你太没,咚咚咚咚,级 你太美!你看着碗面他 及你太美
我:滚
TTS:我听不清楚,你是菜徐坤吗?

要看看视频效果吗?

等我B站审核通过了,我就在评论区把视频附上去,大家可以看看最后的效果!

在这里插入图片描述

别走呀,最后

如果有其他的问题可以评论区指出,有问必答,知无不言。

如果有用,不妨点个赞或者关注一下,消息第一时间通知!

在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐