8浏览
查看: 8|回复: 5

[K10教程] 【花雕动手做】K10 实验之后台播放与播放音符音调1155661

[复制链接]
【花雕动手做】K10 实验之后台播放与播放音符音调1155661图1

行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板,100%采用国产芯片,知识产权自主可控,符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源,教学过程中无需额外连接其他设备,便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。

主要特点
集成摄像头&内置算法,可进行离线图像检测
集成麦克风&内置算法,可进行离线语音识别
集成扬声器&内置算法,可进行离线语音合成
2.8寸彩色屏幕,数据展示更清晰
集成度高,利于教学
接口丰富,兼容软件多,扩展性好


【花雕动手做】K10 实验之后台播放与播放音符音调1155661图2

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10实验之后台播放与播放音符音调1155661

主打:音频录放模块

【花雕动手做】K10 实验之后台播放与播放音符音调1155661图1

相关说明

【花雕动手做】K10 实验之后台播放与播放音符音调1155661图2

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10实验之后台播放与播放音符音调1155661

辅助:屏幕显示相关积木

【花雕动手做】K10 实验之后台播放与播放音符音调1155661图1

LED控制模块
【花雕动手做】K10 实验之后台播放与播放音符音调1155661图2


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10实验之后台播放与播放音符音调1155661

【花雕动手做】行空板 K10 系列实验之音频录放后台播放与播放音符音调1155661
实验开源代码

  1. // 引入行空板K10官方核心驱动库,集成屏幕、按键、RGB彩灯、音频播放全套硬件驱动
  2. #include "unihiker_k10.h"
  3. // 动态标记变量,volatile修饰:防止编译器优化,保证中断/回调修改后主循环能实时读取最新值
  4. volatile float mind_n_okk;
  5. // 按键按下回调函数前置声明,setup中绑定按键事件需要提前告知编译器函数存在
  6. void onButtonAPressed();
  7. void onButtonBPressed();
  8. // 实例化行空板全局硬件主对象,所有屏幕、灯光、按键、音频操作都通过该对象调用
  9. UNIHIKER_K10 k10;
  10. // 屏幕显示方向参数3,用于旋转屏幕画面,可选0/1/2/3四个方向
  11. uint8_t      screen_dir=3;
  12. // 实例化音频播放对象,支持内置旋律播放、自定义单音播放
  13. Music        music;
  14. // 上电/复位仅执行一次的硬件初始化入口
  15. void setup() {
  16.         // 初始化行空板底层所有硬件通信总线
  17.         k10.begin();
  18.         // 根据设定方向初始化显示屏驱动
  19.         k10.initScreen(screen_dir);
  20.         // 创建屏幕绘图缓冲区,绘图操作先写入缓存,统一刷新避免屏幕闪烁
  21.         k10.creatCanvas();
  22.         // 给A按键绑定按下触发回调函数,按下A自动执行onButtonAPressed
  23.         k10.buttonA->setPressedCallback(onButtonAPressed);
  24.         // 给B按键绑定按下触发回调函数,按下B自动执行onButtonBPressed
  25.         k10.buttonB->setPressedCallback(onButtonBPressed);
  26.         // 设置屏幕整体背景颜色为纯黑色 0x000000
  27.         k10.setScreenBackground(0x000000);
  28.         // 在画布第3行绘制红色标题文字
  29.         k10.canvas->canvasText("       行空板K10系列实验", 3, 0xFF0000);
  30.         // 在画布第5行绘制白色说明文字
  31.         k10.canvas->canvasText("后台播放音乐与播放音符音调", 5, 0xFFFFFF);
  32.         // 在画布第7行绘制浅绿色乐谱提示文字
  33.         k10.canvas->canvasText("    一闪一闪亮晶晶1155661", 7, 0x99FF99);
  34.         // 将画布缓存的全部文字画面刷新到实体屏幕,文字才会显示
  35.         k10.canvas->updateCanvas();
  36.         // 初始化状态标记变量,0代表无播放任务
  37.         mind_n_okk = 0;
  38. }
  39. // 主循环函数,setup初始化完成后无限循环执行
  40. void loop() {
  41.         // 判断标记为1:触发A键对应的生日歌播放任务
  42.         if ((mind_n_okk==1)) {
  43.                 delay(500);                    // 阻塞延时0.5秒
  44.                 music.playMusic(BIRTHDAY);     // 播放库内置生日快乐旋律
  45.                 mind_n_okk = 0;                // 播放完成,重置标记,避免重复播放
  46.         }
  47.         // 判断标记为2:触发B键对应的自定义音符(一闪一闪亮晶晶片段)
  48.         if ((mind_n_okk==2)) {
  49.                 delay(500);                    // 阻塞延时0.5秒
  50.                 // playTone(音调频率, 持续时长ms) 逐段播放音符
  51.                 music.playTone(131,  8000);
  52.                 music.playTone(131,  8000);
  53.                 music.playTone(196,  8000);
  54.                 music.playTone(196,  8000);
  55.                 music.playTone(220,  8000);
  56.                 music.playTone(220,  8000);
  57.                 music.playTone(196,  8000);
  58.                 mind_n_okk = 0;                // 音符播放完毕,重置状态标记
  59.         }
  60.         // 循环末尾默认关闭全部RGB灯,-1代表控制所有板载彩灯,0x000000黑色熄灭
  61.         k10.rgb->write(-1, 0x000000);
  62. }
  63. // A按键按下事件回调函数,按键触发时自动运行,不阻塞loop循环
  64. void onButtonAPressed() {
  65.         mind_n_okk = 1;                    // 将状态标记置1,主循环识别后播放生日歌
  66.         k10.rgb->write(-1, 0x00FF00);      // 按下A,全部RGB绿灯常亮
  67. }
  68. // B按键按下事件回调函数,按键触发时自动运行,不阻塞loop循环
  69. void onButtonBPressed() {
  70.         mind_n_okk = 2;                    // 将状态标记置2,主循环识别后播放自定义音符
  71.         k10.rgb->write(-1, 0x0000FF);      // 按下B,全部RGB蓝灯常亮
  72. }
复制代码


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10实验之后台播放与播放音符音调1155661

代码解读

一、头部:库引入、全局变量、函数声明

  1. #include "unihiker_k10.h"
复制代码

导入行空板 K10 官方集成库,内置屏幕、按键、RGB 彩灯、扬声器音频全套驱动,无需手动配置硬件引脚。

  1. volatile float mind_n_okk;
复制代码

变量作用:状态标记,用来区分用户按下 A 键还是 B 键;
volatile关键字:该变量会在按键回调函数中修改,告诉编译器不要优化缓存,保证主循环能实时读到最新数值,防止按键失效、状态不刷新。

  1. void onButtonAPressed();
  2. void onButtonBPressed();
复制代码

函数前置声明。后面要给按键绑定这两个按下触发函数,编译器需要提前识别函数名,否则会报未定义错误。

  1. UNIHIKER_K10 k10;
复制代码

行空板硬件总实例,屏幕、灯光、按键、喇叭全部通过k10调用。

  1. uint8_t screen_dir=3;
复制代码

屏幕旋转参数,0/1/2/3 对应四种显示方向,3 为当前设置的屏幕朝向。

  1. 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 播放一段单音旋律 → 播放结束灯光自动熄灭。
代码设计优势
回调分离思想
按键回调只改标记,播放、延时等耗时操作全部放在主循环,不在回调里写长延时,不会造成主板卡顿、按键失灵;
状态机控制
依靠单一变量区分两种功能,逻辑清晰,方便后续拓展更多按键功能;
硬件可视化反馈
按键对应不同颜色灯光,用户直观区分按下了哪个按键。

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 1 小时前

【花雕动手做】K10实验之后台播放与播放音符音调1155661

Mind+图形编程

【花雕动手做】K10 实验之后台播放与播放音符音调1155661图1

实验场景图与视频记录

【花雕动手做】K10 实验之后台播放与播放音符音调1155661图2

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail