基本信息
文件名称:Arduino 系列:Arduino Micro (适用于音乐设备)_(12).ArduinoMicro音乐设备项目实战:MIDI控制器.docx
文件大小:24.4 KB
总页数:17 页
更新时间:2025-06-15
总字数:约9.37千字
文档摘要

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;