回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

行空板项目实践案例:智能贺卡与语音控制灯 简单

头像 woshitiger 2025.01.27 62 1

        在本次行空板项目实践中,我们成功制作了一个集新年祝福、音乐播放和语音控制开关灯功能于一体的创意作品。

1、

  为了营造新年氛围,我们在行空板上设计了“新年大吉”的显示程序。通过编写代码,让行空板屏幕上依次滚动显示这四个字,并搭配闪烁的灯光效果,仿佛在传递着新年的美好祝福,给人带来喜庆的感觉。

2、

  实现音乐播放功能。我们将预先准备好的新年音乐文件存储到行空板的存储模块中,利用音频播放指令,当按下特定的按钮时,行空板便开始播放欢快的音乐,让整个作品充满了节日的欢乐氛围,为使用者带来愉悦的听觉体验。

3、

  语音识别开关灯功能。借助行空板连接的语音识别模块,我们编写了相应的程序。当使用者对着行空板说出特定的语音指令,如“开灯”,行空板能够准确识别并执行相应操作,点亮连接的LED灯;当说“关灯”时,灯便会熄灭。这一功能不仅增加了作品的趣味性,还体现了智能交互的特点。

  通过这次项目实践,我们深入了解了行空板的功能和应用,锻炼了编程和硬件调试能力。这个作品不仅可以作为新年贺卡送给亲朋好友,还能展示科技与创意的完美结合,为生活增添一份独特的乐趣。

 

 

 

image.png
image.png
image.png

 

 

材料清单

  • 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);
}

附件

评论

user-avatar
  • rzyzzxw

    rzyzzxw2025.02.02

    高水平

    0