USBシリアルのチップに16u2を利用しているArduino UNOなどのベースボードに導入することでUSB midiが利用できるようになるというもの。
互換機の中には16u2搭載のものもあるのでそういったものでも利用可能。(SainsmartのUNO互換機など)
-> Moco公式サイト
Windowsでの導入方法。
FLIP導入 アドレス
これは16u2にファームウェアを書き込むときに利用します。
Javaのランタイムも必要なので入れていない場合はインストールしておきます。
Moco for lufaのHEXをダウンロード GitHubのプロジェクトページからDownload>ZIP後、HEX>***.hex
これがファームウェアです。
DFUモードでArduino UNO(というか16u2)を起動する。
16u2の隣にあるISPピンをジャンパーなどで5番ピン、6番ピンをショート
この状態でPCと接続し、起動したらジャンパーを外します。これでDFUモードになります。
ここで16u2のドライバーがインストールされます。
自動で認識しなかった場合は、program files\atmel\flip***\usbを指定してドライバインストールします。
FLIPを起動してSelect Target Deviceを選び、ATmega16U2を選択。
続いてConnectionでUSBを選び16U2と接続。
MocoのhexファイルをLoad。 ex) dualMoco.hex
あとは左下のRunボタンを押すと書き込みを開始、すぐに終わります。
終了したら右下のStart Applicationを押すか、Arduino UNOのUSBを抜き差しするとUSB midiデバイスとして認識します。
USB midiデバイスとして利用するときにはジャンパーでショートはさせない状態にしておきます。
普通のArduinoとして使う場合。(スケッチを書き込みたいときとか普通にシリアル通信したいときとか)
16u2の隣のISPピンの4番、6番をショートさせてUSBを刺すと通常のUSBシリアルとして動作します。
実際にmidiデータをやり取りする方法。
USB midiとレガシーmidiでは通信速度が異なるのですが、Mocoを利用する場合Arduinoのスケッチ側ではUSBを意識する必要は無いようで、以下のようにしてmidiメッセージを送信することが可能でした。
void setup(){ Serial.begin(31250); } void loop(){ Serial.write(0x90); Serial.write(0x3c); Serial.write(0x64); delay(1000); Serial.write(0x80); Serial.write(0x3c); Serial.write(0x00); delay(1000); }
通信方法さえわかればしめたものです。受信も普通にシリアル監視して通常のレガシーmidiと同様に処理が可能です。
わざわざライブラリを導入する必要は無さそうなので手軽で便利そうです。