![[STM32]3*5MIDI音乐键盘](https://image.lceda.cn/oshwhub/pullImage/6df02f8a465a42989bc8123ee16ec6a4.jpg)
[STM32]3*5MIDI音乐键盘
简介
一款3*5的简易MIDI音乐键盘,支持实时切换128种乐器、10个八度、12个自然大调、部分音效设定和简易的录制与回放,键盘布局参考于《光遇》。
简介:一款3*5的简易MIDI音乐键盘,支持实时切换128种乐器、10个八度、12个自然大调、部分音效设定和简易的录制与回放,键盘布局参考于《光遇》。开源协议
:GPL 3.0
描述
项目简介与功能
本项目是基于STM32F103C8T6的简易MIDI音乐键盘,可通过编码器旋钮和按钮实时切换GM1(General MIDI Level 1)中的128种乐器、12种自然大调、10个八度(C-1 ~ C9)、部分音效(如延音踏板和混响),当前演奏乐器、大调、八度和部分音效设定都显示在0.96寸oled屏幕上。在软件代码V2.0版本中,新增简易的录制与回放。
对于3*5矩阵键盘,第一个按键(K1)对应着当前八度和当前大调的音高,比如当前八度为5,当前大调为C大调时,K1对应音名C4(中央C),按下时会相应输出C4的音符信号。后面14个都按照自然大调音阶所一一对应。这意味着一个八度内只有7个音高。
关于扩展性:
本项目中STM32F103C8T6最小系统板还有9个IO口未使用,如果想更改键盘布局或者想一个八度有12个音高能自由实现。甚至用来实现传统的61键电子琴也是可以的。
项目参数
此处可填写项目的相关功能参数介绍,示例:
本设计采用STM32F103C8T6最小系统板,作为主控制器。
本设计采用VS1053模块(正点原子),主要作用是作为MIDI合成器和输出音频信号。
本设计采用0.96寸OLED屏幕,分别显示当前演奏乐器、八度和大调和部分音效。
本设计采用EC11编码器,用于实时更改演奏乐器、八度和大调和部分音效。
本设计采用3*5矩阵键盘,按键选用的是机械键盘轴,键盘布局来源于游戏《光遇》,其各种谱子可直接用于该MIDI音乐键盘。
原理解析
弹奏原理: 根据VS1053数据手册编写VS1053的驱动库。上电后只需对VS1053进行软件复位、配置好时钟寄存器和模式寄存器后,打实时MIDI补丁就能开启VS1053的实时MIDI功能。而后根据MIDI协议对VS1053发送MIDI指令就能输出对应音符信号和修改音效。逻辑主要是进行各种初始化后进入主循环,分别是编码器的检测与处理逻辑,OLED屏幕显示,3*5矩阵键盘的扫描,MIDI音乐演奏。
部分核心代码如下:

录制与回放原理: 我打算将数据存储在STM32自带的flash中,并设置四个通道用于存储和回放。因为整个项目使用了MIDI协议,自然而然的参考了标准MIDI文件格式,但是一个文件也要至少十几KB,并且文件中的很多MIDI功能在本项目中并没有使用到,所以我做了进一步的简化,得到很简单的规则如下:

定好规则后,就能按照这个规则设想开始编写代码,首先是基本的定义:




而后是最核心的五个函数:
1.定时器中断函数::在录制功能中,只需要用到里面的record_tick++和time++。
在回放功能中,则根据你选择了哪个通道进行回放从而进入哪个if分支。

2.录制函数:
就是在弹奏函数上加上录制功能,在弹奏函数中,当你按下或松开按键时,单片机会发送MIDI的NoteOn或NoteOff指令,那么加入录制功能就是在每次发送一个MIDI指令后顺便将时间差数据和音符数据处理后,赋值给“Data"。


3.存储函数:

4.回放功能初始化函数:

5.回放函数:
就是将上面提到的“规则”用代码写出来


## 软件代码
代码与HAL库绑定较深,不用HAL库的话需要改很多东西。主要是IO口的输出和读取电平直接用的HAL库的代码。
开发环境是STM32CubeIDE和Clion。
开发语言是纯C语言
整个代码工程见附件.
## 可能用到的五金材料
M2.5×22+6单头六角铜柱3个;
M2.5×10+4单头六角铜柱2个;
M2.5×9六角双通铜柱四个;
M2.5×8沉头机丝8个。

## 注意事项
3D模型是在solidworks设计的.
项目本身不发声,需要额外接3.5mm接口的扬声器。
电路板和3D模型都是我学习教程后第一个制作的作品,有很多瑕疵,仅供参考!!!不建议直接使用,同时部分通孔安装铜柱和螺丝会与键帽相互阻挡。更不严丝合缝.
在使用录制和回放功能前,需要检查程序大小,最高不能超过36KB,
本次工程代码在STM32CUBEIDE环境下和编译器优化选项为-Og下对flash和RAM的占用分别为32.4KB和10.2KB左右.
键盘的键帽只推荐17.5MM的圆形键帽(17.5mm已经很紧凑了,再大一点就安装不上去了)。
PCB和3D外壳的通孔全部使用的是3mm直径。
## 实物图



设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。










