PAGE1
PAGE1
ArduinoMicro音乐设备项目实战:MIDI控制器
在这一节中,我们将详细介绍如何使用ArduinoMicro开发一个MIDI控制器。MIDI(MusicalInstrumentDigitalInterface)是一种广泛用于音乐设备之间的通信协议,通过MIDI,我们可以控制合成器、鼓机、音乐软件等设备。ArduinoMicro因其体积小巧、接口丰富和易于编程的特点,非常适合作为MIDI控制器的开发平台。
MIDI协议基础
MIDI消息类型
MIDI协议定义了多种消息类型,每种消息都有特定的用途。常见的MIDI消息类型包括:
NoteOn/NoteOff:表示一个音符的开始和结束。
ControlChange:用于控制合成器的各种参数,如音量、调制、弯音等。
ProgramChange:用于改变合成器的音色。
PitchBend:用于改变音符的音高。
每条MIDI消息由一个状态字节(StatusByte)和一个或多个数据字节(DataByte)组成。状态字节的高四位表示消息类型,低四位表示通道编号(0-15)。例如,状态字节0x90表示通道0的NoteOn消息。
MIDI消息格式
NoteOn:StatusByte(0x90-0x9F),KeyNumber(0x00-0x7F),Velocity(0x00-0x7F)
NoteOff:StatusByte(0x80-0x8F),KeyNumber(0x00-0x7F),Velocity(0x00-0x7F)
ControlChange:StatusByte(0xB0-0xBF),ControllerNumber(0x00-0x7F),ControllerValue(0x00-0x7F)
ProgramChange:StatusByte(0xC0-0xCF),ProgramNumber(0x00-0x7F)
PitchBend:StatusByte(0xE0-0xEF),LSB(0x00-0x7F),MSB(0x00-0x7F)
ArduinoMicro的MIDI接口
ArduinoMicro可以通过其USB接口与计算机或其他MIDI设备通信。我们使用USBMIDI库来实现这一功能。USBMIDI库提供了简单的API,使我们能够发送和接收MIDI消息。
安装USBMIDI库
打开ArduinoIDE。
点击Sketch-IncludeLibrary-ManageLibraries。
在库管理器中搜索MIDIUSB,点击安装。
示例代码:发送NoteOn和NoteOff消息
#includeMIDIUSB.h
voidsetup(){
//初始化MIDI库
MIDIUSB.begin();
}
voidloop(){
//发送NoteOn消息
MIDIUSB.sendNoteOn(60,100,1);//音符60(C4),力度100,通道1
delay(1000);//持续1秒
//发送NoteOff消息
MIDIUSB.sendNoteOff(60,100,1);//音符60(C4),力度100,通道1
delay(1000);//间隔1秒
}
代码解释
MIDIUSB.begin():初始化MIDI库,使其可以通过USB接口发送MIDI消息。
MIDIUSB.sendNoteOn(60,100,1):发送NoteOn消息,参数分别为音符编号、力度和通道编号。
MIDIUSB.sendNoteOff(60,100,1):发送NoteOff消息,参数与NoteOn相同。
使用按钮和旋钮实现MIDI控制器
硬件准备
ArduinoMicro:1个
按钮:1个
旋转编码器:1个
10kΩ电阻:2个
220Ω电阻:1个
跳线:若干
连接示意图
组件|引脚|
|——|——|
按钮|一端连接GND,另一端连接D2|
旋转编码器|DT连接D3,CLK连接D4,SW连接D5,GND连接GND,VCC连接5V|
10kΩ电阻|2个,分别连接按钮和旋钮的GND引脚|
220Ω电阻|连接按钮和旋钮的输入引脚|
示例代码:读取按钮和旋钮并发送MIDI消息
#includeMIDIUSB.h
#includeEncoder.h
//定义按钮和旋钮的引脚
constintbuttonPin=2;