当前位置: 首页 > news >正文

[软件] 基于RA4M2-SENSOR 开发板的数字识读及实现

在以往的人机交互中,多是集中在按键和显示屏的组合上。后来随着触摸技术的发展,各种触摸键及触摸屏也加入到交互形式中,使得操作起来更舒适和更便捷。
如今,伴随着AI技术的成熟及应用,已经可以通过语音指令来操控对象和目标。与之配套的则是将数字识读技术也纳入到人机交互中。
相较于传统的以视觉的方式来传递信息,通过语音来传递信息会更具主动性。
这里就介绍一种在RA4M2-SENSOR 开发板上实现数字识读的方法,其实现的思路就是在给定数据的情况下,通过相应的功能函数来自动提取各数据位的值及权重,进而通过串口向语音模块发送指令来实现数据到语音的转换。期间,还可以有效处理零值读音问题。
为了确保准确地播报数据,需事先将录制好的语音片段存入语音模块读取的TF卡中。并依序对语音片段加以相应的命名,以确保读取的正确性。
在硬件构成方面,它由RA4M2-SENSOR 开发板和语音模块所构成。
在软件实现方面,它是通过RASC来配置所用引脚。
为了测试的方便,是使用UART9来进行调试,其电路如图1所示。

图1 转换电路
由图可知,该串口所用引脚为P110和P109,为此在RASC中需按图2所示来启用它。

图2 启用UART9


随后,在栈中按图3所示进行添加,并按图4所示来设置其参数。
图3 添加UART9

图4 参数设置


以串口进行功能测试的主程序为:
复制
  1. voidhal_entry(void)
  2. {
  3. uint8_tp,f,w,z;
  4. uint16_tk,u;
  5. err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
  6. assert(FSP_SUCCESS == err);
  7. err = R_SCI_UART_Read(&g_uart9_ctrl, uart_rx_buffer,3);
  8. assert(FSP_SUCCESS == err);
  9. printf("RA4M2-SENSOR test : \r\n");
  10. k=1024;
  11. printf("k= %d\r\n",k);
  12. if(k>10)
  13. {
  14. u=10;
  15. w=1;
  16. }
  17. if(k>100)
  18. {
  19. u=100;
  20. w=2;
  21. }
  22. if(k>1000)
  23. {
  24. u=1000;
  25. w=3;
  26. }
  27. while(w>0)
  28. {
  29. p=k/u;
  30. if(p>0)
  31. {
  32. printf("p= %d\r\n",p);
  33. if(w==3)
  34. {
  35. printf("k \r\n");
  36. }
  37. if(w==2)
  38. {
  39. printf("b \r\n");
  40. }
  41. if(w==1)
  42. {
  43. printf("s \r\n");
  44. }
  45. f=1;
  46. }
  47. else
  48. {
  49. if(f==1)
  50. {
  51. printf("0 \r\n");
  52. }
  53. f=0;
  54. }
  55. k=k%u;
  56. if(w>0)
  57. {
  58. w=w-1;
  59. u=u/10;
  60. }
  61. }
  62. printf("p= %d\r\n",k%10);
  63. while(1);
  64. }
经程序的编译和下载,其测试结果如图5所示,说明功能正确。


图5 测试结果

由于串口9所用的引脚并为引出 ,故只好改用串口0来控制语音模块,其使用的引脚为P100和P101。为此,需要使用RASC重新加以配置,并按语音模块的要求将串口通信的波特率设置位9600 bps。
发送控制指令实现数据识读的主程序为:
复制
  1. voidhal_entry(void)
  2. {
  3. uint8_tp,f,w,z;
  4. uint16_tk,u;
  5. err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);
  6. assert(FSP_SUCCESS == err);
  7. err = R_SCI_UART_Read(&g_uart0_ctrl, uart_rx_buffer,3);
  8. assert(FSP_SUCCESS == err);
  9. k=1024;
  10. if(k>10)
  11. {
  12. u=10;
  13. w=1;
  14. }
  15. if(k>100)
  16. {
  17. u=100;
  18. w=2;
  19. }
  20. if(k>1000)
  21. {
  22. u=1000;
  23. w=3;
  24. }
  25. while(w>0)
  26. {
  27. p=k/u;
  28. if(p>0)
  29. {
  30. playn(p);
  31. _write(cmd3,10);
  32. R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
  33. if(w==3)
  34. {
  35. playn(12);
  36. }
  37. if(w==2)
  38. {
  39. playn(11);
  40. }
  41. if(w==1)
  42. {
  43. playn(10);
  44. }
  45. _write(cmd3,10);
  46. f=1;
  47. R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
  48. }
  49. else
  50. {
  51. if(f==1)
  52. {
  53. playn(14);
  54. _write(cmd3,10);
  55. R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
  56. }
  57. f=0;
  58. }
  59. k=k%u;
  60. if(w>0)
  61. {
  62. w=w-1;
  63. u=u/10;
  64. }
  65. }
  66. playn(k%10);
  67. _write(cmd3,10);
  68. R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
  69. playn(13);
  70. _write(cmd3,10);
  71. R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
  72. while(1);
  73. }
经程序的编译和下载,其测试结果如图6所示,说明功能正确。
图6 指令输出测试
输出的指令作用为:
7E FF 06 03 00 00 01 FE F7 EF (一)
7E FF 06 03 00 00 0D FE EB EF (千)
7E FF 06 03 00 00 0A FE EE EF (零)
7E FF 06 03 00 00 02 FE F6 EF (二)
7E FF 06 03 00 00 0B FE ED EF (十)
7E FF 06 03 00 00 04 FE F4 EF (四)
7E FF 06 03 00 00 0E FE EA EF (MPa)

图7 器件连接
在连接语音模块的情况下,其测试效果视频所示。
至此,就实现数据识读功能,如果与传感器相配合,则可以将检测到的环境状态自主的播报出来。后续还可以将它与语音指令控制结合起来以实现家用电器的管控,从而进一步丰富人机交互的方式。


演示视频:



---------------------
作者:jinglixixi
链接:https://bbs.21ic.com/icview-3487926-1-1.html?_dsign=5cbb2118
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

http://www.jsqmd.com/news/648440/

相关文章:

  • 锐捷交换机VSU配置实战:从基础到高可用部署
  • 测试工程师创新力培养:超越自动化
  • Vue 3项目实战:5分钟给你的管理后台加上这个‘旋转木马’式数据看板
  • 避坑指南:SNAP DInSAR处理中常见的10个错误及解决方法
  • ESP32实战指南:基于HTTP与阿里云平台的OTA升级方案对比
  • STM32CubeIDE实战:用HAL库PWM驱动RGB灯带,实现渐变呼吸效果(附完整代码)
  • 人工智能vs机器学习vs深度学习:概念辨析
  • Qwen3.5-2B多场景:科研论文截图→公式识别→推导过程解释全流程
  • LabVIEW信号频域分析实战:从FFT到拉普拉斯变换的算法实现
  • System Generator快速上手:从安装到第一个FPGA设计
  • 避开这些坑!三菱FX3U-4DA模块的5个常见配置错误及解决方案
  • 别再手动拼接字符串了!Vant 时间选择器日期格式化与数据回填的避坑指南
  • 基于 Java 和 PaddleOCR 的智能表格识别系统:从图片到结构化数据的无缝转换
  • 2026年靠谱的湖南室内安全体验馆/建筑工地VR安全体验馆/施工室内安全体验馆综合评价公司 - 行业平台推荐
  • Qwen-Image-2512-ComfyUI部署全记录:跟着步骤走,10分钟搞定AI绘画
  • 嵌入式调试神器SEGGER RTT实战:5分钟实现彩色日志分级输出(Keil工程版)
  • Cityscapes数据集深度解析:从标注文件到评价指标,一篇搞定所有细节
  • VibeVoice应用场景:短视频配音、有声书制作,25种音色任选
  • [开发工具] TTCAN是啥?一文答疑,带你揭开时间触发CAN的神秘面纱
  • AI编程实践:使用MogFace-large模型进行人脸检测代码编写
  • 2026年评价高的建设安全体验馆/专业安全体验馆/室内安全体验馆/汉坤安全体验馆高性价比公司 - 品牌宣传支持者
  • GUI Guider 1.7.0项目实战:为LVGL 8.3界面轻松添加自定义中文字体(基于FreeType 2.13.2)
  • x + y = 31 1/3 x + 1/4 y = 9
  • 避坑指南:ESP32接MAX30102和OLED屏,I2C地址冲突和引脚分配那些事儿
  • Windows系统下Carla无人驾驶模拟器环境配置全攻略
  • 多屏办公利器:DisplayFusion如何提升你的工作效率
  • SolidWorks实体模型意外显示为线框的排查与解决
  • LangChain 1.0实战避坑:手把手教你部署NL2SQL Agent,解决中文列名和CSV导入的那些坑
  • 从IIS配置到托管联合:手把手拆解ArcGIS Enterprise 10.8在Win Server 2016上的完整配置流程
  • GTE中文文本嵌入模型保姆级教程:错误日志排查与常见问题解决