|
本帖最后由 二哲科技 于 2024-4-20 11:56 编辑
1、介绍
语音识别功能已经很普遍了,现在的车机可以完全由语音控制,但是很多产品都不一定会联网,所以离线语音也比较多地方适用,同时通过语音控制屏幕操作也是一个比较新颖的事,可以参考小米su7的车机系统。
2、硬件准备
7英寸迪文科技工业级智能串口屏DMG80480T070_15WTR一体化电阻触摸【https://www.dwin.com.cn/product_detail_4850049.html】
3、设计 首先是素材设计,唐诗选择一个比较有诗意的背景,设计背景和诗词部分。
进入页面之后,可以选择屏幕控制唐诗还是语音控制唐诗系统。
点击诗之后会进入触摸诗词页面,进入诗词页面后,可以进行播放和停止操作。
如果是进入语音控制页面,就没有按键功能,全靠语音实现控制。
设计语音模块参数,按照如下图片方式设计,识别到指定语音,则可以从串口输出指定内容。
代码设计,首先是屏幕按键检测,代码如下: - //获取按键状态
- void get_key_status()
- {
- int i = 0;
- //u16 Va=Read_Dgus(addr);
- u16 Va=Read_Dgus(0x1F00);
- if(Va != 0x0000)
- {
- if(Va == 0x0002) //语音识别页面
- {
- video_recognition_page = 1;
- }
- else if(Va == KEY_LIST_UP) //上翻页
- {
- if(touch_mode_list == 1)
- {
- touch_mode_list = 0;
- write_dgus_vp(TOUCH_MODE_LIST_DISPLAY_ADDR, &touch_mode_list, 1);
- }
- }
- else if(Va == KEY_LIST_DOWN) //下翻页
- {
- if(touch_mode_list == 0)
- {
- touch_mode_list = 1;
- write_dgus_vp(TOUCH_MODE_LIST_DISPLAY_ADDR, &touch_mode_list, 1);
- }
- }
- else if(Va == KEY_SELECT1_ADDR)
- {
- sound_poem(touch_mode_list * 5 + 0);
- }
- else if(Va == KEY_SELECT2_ADDR)
- {
- sound_poem(touch_mode_list * 5 + 1);
- }
- else if(Va == KEY_SELECT3_ADDR)
- {
- sound_poem(touch_mode_list * 5 + 2);
- }
- else if(Va == KEY_SELECT4_ADDR)
- {
- sound_poem(touch_mode_list * 5 + 3);
- }
- else if(Va == KEY_SELECT5_ADDR)
- {
- sound_poem(touch_mode_list * 5 + 4);
- }
- else if(Va == KEY_EXIT_SOUND_ADDR)
- {
- u16 play[2] = {0x0C01, 0x4000};
- write_dgus_vp(VIDEO_ADDR, play, 2);
- }
- else if(Va == KEY_START_SOUND_ADDR)
- {
- u16 play[2] = {0x0A01, 0x4000};
- play[0] = video_index * 0x100 + 0x01;
- write_dgus_vp(VIDEO_ADDR, play, 2);
- }
- else if(Va == KEY_STOP_SOUND_ADDR)
- {
- u16 play[2] = {0x0C01, 0x4000};
- write_dgus_vp(VIDEO_ADDR, play, 2);
- }
- Write_Dgus(0x1F00, 0);
- }
- }
复制代码
语音模块通过串口和屏幕进行连接,语音识别到内容后,从串口发送数据,屏幕接受到数据后,根据当前所在屏幕做出相应的反馈,代码如下: - void uart2_rec()
- {
- if(video_recognition_page == 1)
- {
- switch(R_u2[0])
- {
- case 0x01:
- {
- u16 play[2] = {0x0101, 0x4000};
- write_dgus_vp(VIDEO_ADDR, play, 2);
- break;
- }
- case 0x11:
- {
- if(video_mode_list == 1)
- {
- video_mode_list = 0;
- write_dgus_vp(VIDEO_MODE_LIST_DISPLAY_ADDR, &video_mode_list, 1);
- }
- break;
- }
- case 0x10:
- {
- if(video_mode_list == 0)
- {
- video_mode_list = 1;
- write_dgus_vp(VIDEO_MODE_LIST_DISPLAY_ADDR, &video_mode_list, 1);
- }
- break;
- }
- case 0x20:
- {
- video_select_poem(video_mode_list * 5 + 0);
- break;
- }
- case 0x21:
- {
- video_select_poem(video_mode_list * 5 + 1);
- break;
- }
- case 0x22:
- {
- video_select_poem(video_mode_list * 5 + 2);
- break;
- }
- case 0x23:
- {
- video_select_poem(video_mode_list * 5 + 3);
- break;
- }
- case 0x24:
- {
- video_select_poem(video_mode_list * 5 + 4);
- break;
- }
- case 0x30:
- {
- u16 play[2] = {0x0A01, 0x4000};
- play[0] = video_index * 0x100 + 0x01;
- write_dgus_vp(VIDEO_ADDR, play, 2);
- break;
- }
- case 0x31:
- {
- u16 switchpage[2] = {0x5A01, 4};
- write_dgus_vp(0x0084, switchpage, 2);
- break;
- }
- case 0x32:
- {
- u16 switchpage[2] = {0x5A01, 1};
- video_recognition_page = 0;
- write_dgus_vp(0x0084, switchpage, 2);
- break;
- }
- }
- }
- }
复制代码
4、总结 语音控制屏幕,这和手势识别控制有异曲同工之妙,非常适用于消费产品,而且目前的语音模块价格都很便宜,且识别率也比较高,大家有兴趣可以下载附件玩一玩。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|