arduinoをMIDIデバイスとして認識させようとして躓いた話
大学の課題でメディアアート作品を作るにあたってarduinoを使ってMIDI入力しなければならない状況になった。実現にはarduino自体のファームウェアを書き換えてPC側からの識別をMIDI機器に変える必要がある。今回は、同じようなことについて悩む人が少しでも減るようにTipsを記そうと思う。一応MIDIとして動作するところまでは出来たものの、苦戦したし今でもわからないこともあるが勘弁願いたい。
今回試した環境はarduino UNO(atMega16U2)である。
まず必要なもの。二つをダウンロードしてインストール、或いは解凍してほしい。
ATMEL FLIP(Windows/Linuxユーザーであれば)
Macユーザーはdfu-programmerを使ってターミナルから書き込めるはずなんだけど、ネットに乗っていた情報通りやってもMacbook Pro Letinaでうまくいかなかったので今回はwindows10で行った。
ここからは手順。
1.arduinoのUSB接続を外した状態にする。
2.reset2ピンとその隣のGNDをショートさせる。場所はリセットスイッチ近くの6個ピンが並んでいるところのUSBジャック側ふたつ。
3.ショートさせた状態でUSB接続する。うまくいくとLEDが数回明滅した後点灯する。
4.windowsのデバイスマネージャーに不明なデバイスが認識されるので、右クリックして手動でドライバをインストールする。インストールしたディレクトリのAtmel/Flip x.x.x/usbを選択すると、デバイス名がatmega16U2と認識される。この作業を怠るとFilpでAtLibUsb.dll not foundといった感じに表示されて先に進めなくなる。
5.FLIPを起動してfile>load HEX Fileから解凍したmocolufa-mastar/HEX/dualMoco.hexを選択する。
6.Erace、Program、Verifyにチェックが入っているか確認してRunをクリック。
7.USBを差しなおす。
これでMIDIデバイスとして認識されたはずである。5と6手順が違った場合は、0x000 not blankみたいなエラーが出る。
次にarduinoのスケッチを書き込むのだが、ファームウェアを書き換えたため書き込むには一手間加える必要がある。
MOS12ピン(さっきショートさせたGNDの隣)とGND(さっきのところ)をショートさせた状態でUSBを差しなおす。これを行うことでarduino IDEからスケッチが書き込める。ショートさせない状態で差しなおせばMIDIドライバとして認識される。(arduino IDEでuproadを行うとエラーになる。)
スケッチは
#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
と最初に書き加える。
ちなみにMIDIを出力するには
MIDI.sendNoteOn(note,velocity,ch);
と書けばよい。noteは音階、velocityは打鍵の強さ(確か0~127)、chはMIDIのチャンネルを示しているので適宜intで変数を宣言するなり、直接打つなり目的に合った使い方をして欲しい。今回はchを1にした。
この手順でAbleton Live9から認識しているのを確認した。(2015/11/19)下記の動画はフォトリフレクタを使ってタイミングを入力し、Ableton Live9でDRUM RACKに909のKickをアサインして鳴らしている。
この記事が気に入ったらサポートをしてみませんか?