行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板,100%采用国产芯片,知识产权自主可控,符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源,教学过程中无需额外连接其他设备,便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。
主要特点
集成摄像头&内置算法,可进行离线图像检测
集成麦克风&内置算法,可进行离线语音识别
集成扬声器&内置算法,可进行离线语音合成
2.8寸彩色屏幕,数据展示更清晰
集成度高,利于教学
接口丰富,兼容软件多,扩展性好
主打:音频录放模块
相关说明
辅助:屏幕显示相关积木
LED控制模块
【花雕动手做】行空板 K10 系列实验之音频录放后台播放与播放音符音调1155661
实验开源代码
// 引入行空板K10官方核心驱动库,集成屏幕、按键、RGB彩灯、音频播放全套硬件驱动#include"unihiker_k10.h"// 动态标记变量,volatile修饰:防止编译器优化,保证中断/回调修改后主循环能实时读取最新值volatilefloatmind_n_okk;// 按键按下回调函数前置声明,setup中绑定按键事件需要提前告知编译器函数存在voidonButtonAPressed();voidonButtonBPressed();// 实例化行空板全局硬件主对象,所有屏幕、灯光、按键、音频操作都通过该对象调用UNIHIKER_K10 k10;// 屏幕显示方向参数3,用于旋转屏幕画面,可选0/1/2/3四个方向uint8_tscreen_dir=3;// 实例化音频播放对象,支持内置旋律播放、自定义单音播放Music music;// 上电/复位仅执行一次的硬件初始化入口voidsetup(){// 初始化行空板底层所有硬件通信总线k10.begin();// 根据设定方向初始化显示屏驱动k10.initScreen(screen_dir);// 创建屏幕绘图缓冲区,绘图操作先写入缓存,统一刷新避免屏幕闪烁k10.creatCanvas();// 给A按键绑定按下触发回调函数,按下A自动执行onButtonAPressedk10.buttonA->setPressedCallback(onButtonAPressed);// 给B按键绑定按下触发回调函数,按下B自动执行onButtonBPressedk10.buttonB->setPressedCallback(onButtonBPressed);// 设置屏幕整体背景颜色为纯黑色 0x000000k10.setScreenBackground(0x000000);// 在画布第3行绘制红色标题文字k10.canvas->canvasText(" 行空板K10系列实验",3,0xFF0000);// 在画布第5行绘制白色说明文字k10.canvas->canvasText("后台播放音乐与播放音符音调",5,0xFFFFFF);// 在画布第7行绘制浅绿色乐谱提示文字k10.canvas->canvasText(" 一闪一闪亮晶晶1155661",7,0x99FF99);// 将画布缓存的全部文字画面刷新到实体屏幕,文字才会显示k10.canvas->updateCanvas();// 初始化状态标记变量,0代表无播放任务mind_n_okk=0;}// 主循环函数,setup初始化完成后无限循环执行voidloop(){// 判断标记为1:触发A键对应的生日歌播放任务if((mind_n_okk==1)){delay(500);// 阻塞延时0.5秒music.playMusic(BIRTHDAY);// 播放库内置生日快乐旋律mind_n_okk=0;// 播放完成,重置标记,避免重复播放}// 判断标记为2:触发B键对应的自定义音符(一闪一闪亮晶晶片段)if((mind_n_okk==2)){delay(500);// 阻塞延时0.5秒// playTone(音调频率, 持续时长ms) 逐段播放音符music.playTone(131,8000);music.playTone(131,8000);music.playTone(196,8000);music.playTone(196,8000);music.playTone(220,8000);music.playTone(220,8000);music.playTone(196,8000);mind_n_okk=0;// 音符播放完毕,重置状态标记}// 循环末尾默认关闭全部RGB灯,-1代表控制所有板载彩灯,0x000000黑色熄灭k10.rgb->write(-1,0x000000);}// A按键按下事件回调函数,按键触发时自动运行,不阻塞loop循环voidonButtonAPressed(){mind_n_okk=1;// 将状态标记置1,主循环识别后播放生日歌k10.rgb->write(-1,0x00FF00);// 按下A,全部RGB绿灯常亮}// B按键按下事件回调函数,按键触发时自动运行,不阻塞loop循环voidonButtonBPressed(){mind_n_okk=2;// 将状态标记置2,主循环识别后播放自定义音符k10.rgb->write(-1,0x0000FF);// 按下B,全部RGB蓝灯常亮}代码解读
一、头部:库引入、全局变量、函数声明
#include"unihiker_k10.h"导入行空板 K10 官方集成库,内置屏幕、按键、RGB 彩灯、扬声器音频全套驱动,无需手动配置硬件引脚。
volatilefloatmind_n_okk;变量作用:状态标记,用来区分用户按下 A 键还是 B 键;
volatile关键字:该变量会在按键回调函数中修改,告诉编译器不要优化缓存,保证主循环能实时读到最新数值,防止按键失效、状态不刷新。
voidonButtonAPressed();voidonButtonBPressed();函数前置声明。后面要给按键绑定这两个按下触发函数,编译器需要提前识别函数名,否则会报未定义错误。
UNIHIKER_K10 k10;行空板硬件总实例,屏幕、灯光、按键、喇叭全部通过k10调用。
uint8_tscreen_dir=3;屏幕旋转参数,0/1/2/3 对应四种显示方向,3 为当前设置的屏幕朝向。
Music music;音频播放对象,两种播放能力:内置完整旋律、自定义单音符播放。
二、setup () 初始化函数(上电只执行 1 次)
k10.begin():初始化主板底层硬件总线;
k10.initScreen(screen_dir):按指定方向初始化显示屏;
k10.creatCanvas():创建屏幕画布缓存,绘图先存缓存,统一刷新,消除屏幕闪烁;
setPressedCallback():绑定按键回调,按下 A/B 会自动执行对应函数,属于中断式响应,不会被delay卡住;
setScreenBackground(0x000000):屏幕底色设纯黑;
canvasText(文字,行数,颜色):在画布指定行打印彩色文字,展示实验标题与功能说明;
updateCanvas():把缓存里的文字刷新到实体屏幕;
mind_n_okk = 0:开机初始化状态标记,0 = 无播放任务。
三、loop () 无限主循环
程序初始化完成后,该函数不停循环运行,负责执行音频播放逻辑。
判断 mind_n_okk == 1(A 键按下标记)
延时 500ms;
调用内置旋律播放生日快乐歌;
标记清零,避免重复循环播放。
判断 mind_n_okk == 2(B 键按下标记)
延时 500ms;
playTone(频率,持续毫秒) 逐个播放音符,实现《一闪一闪亮晶晶》片段;
标记清零。
末尾 k10.rgb->write(-1, 0x000000)
-1代表所有板载 RGB 灯,0x000000 为黑色,每次循环末尾熄灭彩灯;
效果:按键点亮彩灯,循环走到末尾自动关灯。
四、按键回调事件函数(触发式,不阻塞程序)
A 键回调 onButtonAPressed ()
mind_n_okk = 1:修改状态标记,通知主循环播放生日歌;
RGB 全部绿灯亮起,作为按键按下视觉提示。
B 键回调 onButtonBPressed ()
mind_n_okk = 2:修改状态标记,通知主循环播放自定义音符;
RGB 全部蓝灯亮起,作为按键按下视觉提示。
五、整体运行逻辑与设计优点
完整运行流程
开机黑屏显示文字,无灯光、无声音;
按下 A:绿灯亮 → 等待 0.5s 播放生日快乐歌 → 播放结束灯光自动熄灭;
按下 B:蓝灯亮 → 等待 0.5s 播放一段单音旋律 → 播放结束灯光自动熄灭。
代码设计优势
回调分离思想
按键回调只改标记,播放、延时等耗时操作全部放在主循环,不在回调里写长延时,不会造成主板卡顿、按键失灵;
状态机控制
依靠单一变量区分两种功能,逻辑清晰,方便后续拓展更多按键功能;
硬件可视化反馈
按键对应不同颜色灯光,用户直观区分按下了哪个按键。
Mind+图形编程
实验场景图与视频记录