- 行空板之语音控制灯
- 代码如下:
- 、// 引入离线语音识别ASR库,实现语音唤醒、命令识别与语音播报
- #include "asr.h"
- // 引入行空板K10硬件驱动库,用于控制屏幕、RGB彩灯等外设
- #include "unihiker_k10.h"
- // 实例化硬件对象
- UNIHIKER_K10 k10; // 行空板主控对象,操控屏幕、彩灯、语音播报
- ASR asr; // 语音识别对象,处理收音、识别、TTS语音朗读
- // 定义屏幕旋转参数,数值2代表屏幕倒置显示
- uint8_t screen_dir=2;
- //=====================================================================
- // setup初始化函数:上电/重启仅执行一次,完成硬件初始化与指令配置
- //=====================================================================
- void setup() {
- // 初始化行空板底层所有硬件资源
- k10.begin();
- // 配置语音识别模块
- // CONTINUOUS:持续不间断收音
- // CN_MODE:中文识别模式
- // 12000:语音检测灵敏度,数值越[media=x大抗环境噪音越强
- asr.asrInit(CONTINUOUS, CN_MODE, 12000);
- // 阻塞等待语音模块启动完成
- // _asrState=0 表示语音模型正在加载,模块未就绪
- // 每100毫秒检测一次状态,防止硬件未就绪导致程序出错
- while(asr._asrState == 0){delay(100);}
- // 根据预设参数初始化显示屏
- k10.initScreen(screen_dir);
- // 创建屏幕绘图画布,所有文字先写入画布缓冲区
- k10.creatCanvas();
- // 设置语音播报语速
- // 参数范围1~5,数字越大语速越快;2为中等语速
- asr.setAsrSpeed(2);
- // 向语音模块添加两条自定义离线语音命令
- // 函数格式:addASRCommand(命令编号, 拼音口令)
- // 编号1:拼音 kai deng 对应中文“开灯”
- asr.addASRCommand(0+1, "kai deng");
- // 编号2:拼音 guan deng 对应中文“关灯”
- asr.addASRCommand(1+1, "guan deng");
- // 设置屏幕背景颜色:0x000000 纯黑色背景
- k10.setScreenBackground(0x000000);
- }
- //=====================================================================
- // loop主循环:初始化完成后无限循环,实时监测语音指令
- //=====================================================================
- void loop() {
- // 条件判断:是否识别到唤醒词【你好小新】
- if (asr.isWakeUp()) {
- // 唤醒成功:在画布第6行写入红色文字
- k10.canvas->canvasText("已唤醒行空板.......", 6, 0xFF0000);
- // 刷新画布内容到LCD屏幕
- k10.canvas->updateCanvas();
- }
- else {
- // 未唤醒状态:第4行写入浅蓝色文字,提示唤醒关键词
- k10.canvas->canvasText("唤醒词为“你好小新”", 4, 0x33CCFF);
- k10.canvas->updateCanvas();
- }
- // 判断:是否识别到编号1的语音命令“开灯”
- if (asr.isDetectCmdID(0+1)) {
- // 在第9行写入白色文字,提示执行开灯动作
- k10.canvas->canvasText(" 打开白色灯光", 9, 0xFFFFFF);
- k10.canvas->updateCanvas();
- // 点亮全部RGB彩灯:-1代表所有灯珠,0xFFFFFF为纯白色
- k10.rgb->write(-1, 0xFFFFFF);
- // TTS语音合成,喇叭朗读语音:灯打开
- asr.speak("灯打开");
- // 保持画面与语音2秒
- delay(2000);
- }
- // 判断:是否识别到编号2的语音命令“关灯”
- if (asr.isDetectCmdID(1+1)) {
- // 清空画布第9行,避免新旧文字重叠
- k10.canvas->canvasClear(9);
- // 写入浅绿色文字,提示关灯动作
- k10.canvas->canvasText(" 关闭白色灯光", 9, 0x99FF99);
- k10.canvas->updateCanvas();
- // 关闭所有RGB彩灯,颜色0x000000代表熄灭
- k10.rgb->write(-1, 0x000000);
- // 喇叭语音播报:关灯了
- asr.speak("关灯了");
- // 画面停留2秒
- delay(2000);
- }
- // 清空画布第6行及以下所有文字,清除上一轮显示内容
- k10.canvas->canvasClear(6);
- }
|
|
|
|
|
|
|
|
|