失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 基于LD3320的语音识别模块LD-V7使用记录

基于LD3320的语音识别模块LD-V7使用记录

时间:2024-06-21 08:47:03

相关推荐

基于LD3320的语音识别模块LD-V7使用记录

硬件平台

stm32f103c8t6,LD-V7语音识别模块

语音模块介绍

重点!!

串口通信

语音模块串口发送的内容(被修改了,不是出厂内容,修改步骤看资料)

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:/*命令“亮度30”*/PrintCom("亮度30\r\n"); /*text.....*/break;case CODE_SH:/*命令“亮度60”*/PrintCom("亮度60\r\n"); /*text.....*/break;case CODE_GZ:/*命令“亮度100”*/PrintCom("亮度100\r\n"); /*text.....*/break;default:PrintCom("请重新识别发口令\r\n"); /*text.....*/break;}}else {PrintCom("请说出一级口令\r\n"); /*text.....*/}

STM32C8T6接收

主要分为串口中断,超时方式接收,比较

超时方式接收被放到了主循环,配合串口中断使用,是一个不太成熟的函数,不过用在这里绰绰有余。

//串口中断函数:u8 rev_buf[100];//接收缓冲区u8 addr=0;//地址偏移量u8 revice_ok=0;//接收完成标志u8 revice_start=0;//开始接收受标志u32 time_out=0;//超时计数值//串口1中断服务函数void USART1_IRQHandler(void){u8 data;data=USART1->DR;//读取同时会清除标志rev_buf[addr++]=data;//printf("addr:%d\r\n",addr);revice_start=1;//开始接收time_out=0;//超级计数值清零}

//串口中断接收函数int ld3320_uart_receive(void){//char * buf = NULL;int num = 0;if(revice_ok){revice_ok=0;//清标志printf("%s\r\n",rev_buf);printf("%s\r\n",rev_buf);printf("rev_buf is ok \r\n");num = compare_usart((char *) rev_buf);return num;}if(revice_start)//开始接收{Main_delay();time_out++;num=0;if(time_out>=50)//超时就{revice_ok=1;rev_buf[addr]='\0';addr=0;time_out=0;revice_start=0;}}return 0;}

//比较/*对比的BUF是直接定好的,宏定义方便使用#define BUF_XIAOCHEN "收到\r\n"#define BUF_LIANG "亮一点\r\n"#define BUF_AN "变暗\r\n"#define BUF_KAI"开灯\r\n"#define BUF_GUAN"关灯\r\n"#define BUF_SANSHI "亮度30\r\n"#define BUF_LIUSHI "亮度60\r\n"#define BUF_YIBAI "亮度100\r\n"#define BUF_CONGFA "请重新识别发口令\r\n"#define BUF_FA "请说出一级口令\r\n"*/int compare_usart(char * string_data){if(strcmp(string_data, ( char *)BUF_XIAOCHEN) == 0)//比较接受字符内容 收到{printf("this is compare return 1\r\n");return 1;}else if(strcmp((char *)rev_buf, (char *)BUF_LIANG) == 0){return 2;}else if(strcmp((char *)rev_buf, (char *)BUF_AN) == 0){return 3;}else if(strcmp((char *)rev_buf, (char *)BUF_KAI) == 0){return 4;}else if(strcmp((char *)rev_buf, (char *)BUF_GUAN) == 0){return 5;}else if(strcmp((char *)rev_buf, (char *)BUF_SANSHI) == 0){return 6;}else if(strcmp((char *)rev_buf, (char *)BUF_LIUSHI) == 0){return 7;}else if(strcmp((char *)rev_buf, (char *)BUF_YIBAI) == 0){return 8;}else if(strcmp((char *)rev_buf, (char *)BUF_CONGFA) == 0){return 9;}else if(strcmp((char *)rev_buf, (char *)BUF_FA) == 0){return 10;}return 0;}

经过这三步,就可以在主循环得到返回值,根据返回数值执行对应操作。

j=ld3320_uart_receive();//得到接受函数的字符串buff//i=compare_usart(buff);//字符串buff和已知字符串对比的值//i=1;printf("j = %d\r\n",j);switch(j){case 1://printf("1\r\n");OLED_ShowChar(48,6,1);//OLED_Clear(); break;//小陈case 2: printf(" switch :2\r\n");break;//亮一点case 3: printf(" switch :3\r\n");break;//变暗case 4: printf(" switch :4\r\n");break;//开灯case 5: printf(" switch :5\r\n");break;//关灯case 6: printf(" switch :6\r\n");break;//case 7: printf(" switch :7\r\n");break;//case 8: printf(" switch :8\r\n");break;//case 9: printf(" switch :9\r\n");break;//请重新识别发口令case 10: printf(" switch :10\r\n");break;//请说出一级口令//case 11: printf("11\r\n");break;//default:break;}}

如果觉得《基于LD3320的语音识别模块LD-V7使用记录》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。