ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## **MIDI音乐** > 本例向你展示如何从Arduino或Genuino板通过**标准5端子DIN接口**(standard 5 poles DIN)发送MIDI音符标准发送到MIDI乐器。 MIDI是**乐器数字接口**(**Musical Instrument Digital Interface**)的简称。它是用来控制电子合成器、编曲机以及其他乐器的一个很有用的协议。MIDI设备主要分为两个大类:第一类是控制器(换句话说就是根据人类操作生成MIDI音符的设备)。第二类是合成器(包括采样器、编曲机等等诸如此类),合成器读取MIDI数据来发声、发光或者产生其他效果。 MIDI其实是一个串口协议,在**比特率** 31250bit/s工作。板子内置的串口(包括MEGA板)能够以这个速率传输数据。 MIDI **字节**(byte )可以被分为两种:**控制字节**和**数据字节**。控制字节值一般都>=128(十六进制0x80-0xFF)。数据字节值一般都在0到127之间(十六进制0x00-0x7F)。控制字节包含了音符播放、音符停止、滑音等诸如此类。数据字节则包含单个音符的音调、速度或者音符的强弱(响度),滑音的量等诸如此类。想要了解更多关于MIDI的细节,请参看互联网上的各种MIDI协议说明书。 MIDI数据通常以十六进制计数,因为MIDI banks和MIDI乐器都用的是用16进制 想要了解更多关于MIDI,你可以了解下[introduction to MIDI ](http://www.tigoe.net/pcomp/code/communication/midi)或者[这个例子](http://itp.nyu.edu/physcomp/Labs/MIDIOutput)。 ### **所需硬件** Arduino Uno板或Genuino Uno板  MIDI母接口  2个220Ω电阻  跳线  可用的MIDI设备(可选,为了测试)  连接线 ### **电路** 根据MIDI协议要求,所有的MIDI接口都应是母口。  下面展示如何连接MIDI母口:  ![图片来自官网](http://img.blog.csdn.net/20160512173831258)  MIDI母头5号引脚用一个220Ω电阻连接到数字引脚1  MIDI母头2号连接到GND  MIDI母头4号通过220Ω电阻+5V ### **原理图** ![图片来自官网](http://img.blog.csdn.net/20160512173858232) ### **代码** 注意!如果你在用搭载ATmega32U4型号处理器的板子(比如DUE或者Leonardo),请不要用Serial(TX0/RX0),而应使用Serial1(TX1/RX1),在下列代码中也要把Serial改为Serial1。 ~~~ /* MIDI音乐 本例向你展示如何是用1号引脚(串口传送引脚)来发送MIDI音符数据。 如果将MIDI乐器连上MIDI乐器,Arduino就会不断的“弹奏”F#-0 (0x1E)到F#-5 (0x5A)的音阶。 电路搭建: * MIDI母头5号引脚用一个220Ω电阻连接到数字引脚1 * MIDI母头2号连接到GND * MIDI母头4号通过220Ω电阻+5V 连接MIDI线到接头上,并且把MIDI线插上乐器。然后就享受Arduino演奏家的奇妙旋律吧! 代码是公开的 */ void setup() { // 给串口设置MIDI的波特率: Serial.begin(31250); } void loop() { //从F#-0 (0x1E)弹到F#-5 (0x5A): for (int note = 0x1E; note < 0x5A; note ++) { //在参数一传入了channel 1 (0x90),参数二传入了一些音符值 (note), 参数二传入了silent 速度(0x00): noteOn(0x90, note, 0x00); delay(100); } } // 弹奏音符,请不要尝试给第一个参数cmd传入任何大于127的值: void noteOn(int cmd, int pitch, int velocity) { Serial.write(cmd); Serial.write(pitch); Serial.write(velocity); } ~~~ ### **相关资料** [serial.begin()](https://www.arduino.cc/en/Serial/Begin)  [for()循环](https://www.arduino.cc/en/Reference/For)