在本次行空板项目实践中,我们成功制作了一个集新年祝福、音乐播放和语音控制开关灯功能于一体的创意作品。
1、
为了营造新年氛围,我们在行空板上设计了“新年大吉”的显示程序。通过编写代码,让行空板屏幕上依次滚动显示这四个字,并搭配闪烁的灯光效果,仿佛在传递着新年的美好祝福,给人带来喜庆的感觉。
2、
实现音乐播放功能。我们将预先准备好的新年音乐文件存储到行空板的存储模块中,利用音频播放指令,当按下特定的按钮时,行空板便开始播放欢快的音乐,让整个作品充满了节日的欢乐氛围,为使用者带来愉悦的听觉体验。
3、
语音识别开关灯功能。借助行空板连接的语音识别模块,我们编写了相应的程序。当使用者对着行空板说出特定的语音指令,如“开灯”,行空板能够准确识别并执行相应操作,点亮连接的LED灯;当说“关灯”时,灯便会熄灭。这一功能不仅增加了作品的趣味性,还体现了智能交互的特点。
通过这次项目实践,我们深入了解了行空板的功能和应用,锻炼了编程和硬件调试能力。这个作品不仅可以作为新年贺卡送给亲朋好友,还能展示科技与创意的完美结合,为生活增添一份独特的乐趣。



材料清单
- X
代码
/*!
* MindPlus
* esp32s3bit
*
*/
#include "asr.h"
#include "unihiker_k10.h"
// 动态变量
volatile float mind_n_color2, mind_n_color1, mind_n_color3;
// 函数声明
uint32_t rgbToColor(uint8_t r, uint8_t g, uint8_t b);
void onButtonAPressed();
void onButtonABPressed();
void onButtonBPressed();
// 创建对象
uint8_t screen_dir=3;
UNIHIKER_K10 k10;
Music music;
ASR asr;
// 主程序开始
void setup() {
k10.begin();
k10.initScreen(screen_dir);
k10.creatCanvas();
asr.asrInit(CONTINUOUS, CN_MODE, 6000);
while(asr._asrState == 0){delay(100);}
asr.setAsrSpeed(2);
k10.buttonA->setPressedCallback(onButtonAPressed);
k10.buttonAB->setPressedCallback(onButtonABPressed);
k10.buttonB->setPressedCallback(onButtonBPressed);
k10.setScreenBackground(0xFF0000);
for (int index = 0; index < 5; index++) {
mind_n_color2 = (random(1, 12+1));
mind_n_color1 = (random(1, 255+1));
mind_n_color3 = (random(1, 255+1));
k10.canvas->canvasText("蛇年快乐", mind_n_color2, rgbToColor(round(mind_n_color1), round(mind_n_color2), round(mind_n_color3)));
k10.canvas->canvasText("新年大吉", (mind_n_color2 + 1), rgbToColor(round(mind_n_color1), round(mind_n_color2), round(mind_n_color3)));
k10.canvas->updateCanvas();
delay(1000);
k10.canvas->canvasClear();
}
music.playMusic(ENTERTAINER);
}
void loop() {
if (asr.isWakeUp()) {
k10.canvas->canvasText("进入语音识别状态,", 1, 0x0000FF);
k10.canvas->canvasText("请说出控制命令词……", 2, 0x0000FF);
k10.canvas->updateCanvas();
}
else {
k10.canvas->canvasText("进入休眠状态,", 1, 0x0000FF);
k10.canvas->canvasText("请说出唤醒词“你好,小新”……", 2, 0x0000FF);
k10.canvas->updateCanvas();
}
asr.addASRCommand(0+1, "kai deng");
asr.addASRCommand(1+1, "guan deng");
if (asr.isWakeUp()) {
if (asr.isDetectCmdID(0+1)) {
asr.speak("灯光已经打开");
k10.rgb->brightness(round(9));
k10.rgb->write(-1, 0x00FF00);
}
if (asr.isDetectCmdID(1+1)) {
asr.speak("灯光已经关闭");
k10.rgb->brightness(round(9));
k10.rgb->write(-1, 0x000000);
}
}
}
// 事件回调函数
void onButtonAPressed() {
k10.rgb->write(0, 0xFF0000);
k10.rgb->write(1, 0x000000);
k10.rgb->write(2, 0x000000);
}
void onButtonABPressed() {
k10.rgb->write(-1, 0x00CCCC);
}
void onButtonBPressed() {
k10.rgb->write(1, 0xFF9966);
k10.rgb->write(0, 0x000000);
k10.rgb->write(2, 0x000000);
}
// Static functions
uint32_t rgbToColor(uint8_t r, uint8_t g, uint8_t b)
{
return (uint32_t)((((uint32_t)r<<16) | ((uint32_t)g<<8)) | (uint32_t)b);
}
rzyzzxw2025.02.02
高水平