Arduino内置教程-通讯-Midi

这个教程展示怎么从Arduino或者Genuino开发板通过一个5极DIN电缆来发送MIDI音符到一个MIDI乐器。

MIDI 音符播放器

  • 这个教程展示怎么从Arduino或者Genuino开发板通过一个5极DIN电缆来发送MIDI音符到一个MIDI乐器。
  • MIDI,乐器的数字接口,一个用于控制合成器,音序器,和其他音乐设备的协议。MIDI设备通常分为两大类:控制器(基于人的动作来产生MIDI信号的设备)和合成器(包括采样器,音序器等等)。后者输入MIDI数据,就会产生声音,光,或者其他的东西。
  • MIDI使一个串口协议,可以每秒钟操作31,250字节。开发板的内置串口接口(所有在Mega上的串口接口都一样)可以在那个速率上发送数据。
  • MIDI字节被分成两类型:命令字节和数据字节。命令字节通常是大于128,或者0x80到0xFF(十六进制)。数据字节通常少于127,或者0x00到0x7F(十六进制)。命令包括类似note on, note off, pitch bend等等。数据字节包括弹奏音符的音高,速率,或者,音符音量,弯音等等。更多细节,查看MIDI特性或者MIDI Protocol Guides on the Web
  • MIDI数据通常用十六进制符号表示,因为MIDI音阶和乐器被分成16组。

硬件要求

  • Arduino or Genuino Uno
  • MIDI母座
  • 220Ω 电阻
  • 连接线
  • MIDI 启动设备(可选, 测试用)

电路

根据MIDI说明书,所有MIDI连接器都是母座。这里是怎样把连接器连接到开发板。
  • MIDI插座pin5通过220 Ω电阻连接到数字引脚pin1。
  • MIDI插座pin2连接到地。
  • MIDI插座pin4通过220 Ω电阻连接到+5V。
Arduino内置教程-通讯-Midi

原理图

Arduino内置教程-通讯-Midi

样例代码

注意:如果你用带有ATmega3U4的开发板(如DUE或者Leonardo),请根据下面程序用Serial1来替换Serial。
void setup() {
  //  Set MIDI baud rate:
  Serial.begin(31250);
}

void loop() {
  // play notes from F#-0 (0x1E) to F#-5 (0x5A):
  for (int note = 0x1E; note < 0x5A; note ++) {
    //Note on channel 1 (0x90), some note value (note), middle velocity (0x45):
    noteOn(0x90, note, 0x45);
    delay(100);
    //Note on channel 1 (0x90), some note value (note), silent velocity (0x00):
    noteOn(0x90, note, 0x00);
    delay(100);
  }
}

//  plays a MIDI note.  Doesn't check to see that
//  cmd is greater than 127, or that data values are  less than 127:
void noteOn(int cmd, int pitch, int velocity) {
  Serial.write(cmd);
  Serial.write(pitch);
  Serial.write(velocity);
}

人已赞赏
动态

Arduino内置教程-通讯-图表

2019-1-5 6:52:03

动态

Arduino内置教程-通讯-多串口的使用Mega

2019-1-5 8:37:16

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索