飽きた訳ではないのだよ。時間が取れなかったのだ。
…と前置きをした所でものすごく久々のArduino記事。
今までは外部からの入力をMIDIに変換するものを作っていたのだが、
訳あって外部からのMIDI入力を電圧に変更するものを作る。
今までの逆だ。
とってもArduinoは既にUSB-MIDIデバイス化しているし、
すごい人達のおかげでMIDI信号を生成する所は
すでにライブラリがあるので(これは本当にありがたい)、
簡単なコードで実現できる、はずだ。
#include <MIDI.h> //MIDIライブラリ読み込み MIDI_CREATE_DEFAULT_INSTANCE(); void setup() { // put your setup code here, to run once: MIDI.begin(); //MIDIライブラリを使う pinMode(13,OUTPUT); //13ピンをアウトプットに設定 } void loop() { if (MIDI.read()) //MIDIメッセージを受信したら { switch(MIDI.getType()) { case midi::NoteOn: //鍵盤を押されたら digitalWrite(13,HIGH); //13をHIGHに(LED点灯) break; case midi::NoteOff: //鍵盤を離されたら digitalWrite(13,LOW); //13をLOWに(LED消灯) break; } } }
というわけで、これを書き込んでDAWからMIDI信号を送ると
ボード上のLEDが光るはずなのだが、
なぜかめちゃくちゃなMIDIデータが書き込まれる。
2tickとか3tick置きに書き込まれていて
全く訳が分からない。
Recボタンを外したら直ったのだが、
なにかループが起きてバグったのだろうか。
→解決した
無事ノートナンバーに反応して光った。
これはデジタルアウトで、オン/オフのスイッチなので、
次はコントロールチェンジの0-127を0-5Vの
電圧に変換するアナログアウト(厳密にはPWMだが)をしてみよう。
#include <MIDI.h> //MIDIライブラリ読み込み MIDI_CREATE_DEFAULT_INSTANCE(); void setup() { // put your setup code here, to run once: MIDI.begin(); //MIDIライブラリを使う pinMode(11,OUTPUT); //11ピンをアウトプットに設定 } void loop() { uint8_t data1,data2; if (MIDI.read()) //MIDIメッセージを受信したら { switch(MIDI.getType()) { case midi::ControlChange: //CCを受信したら data1 = MIDI.getData1(); //CC No取得 data2 = MIDI.getData2(); //CC 値を取得 data2 = data2*2; analogWrite(11,data2); //11の出力をccの値に break; } } }
いいのか、こんなに簡単で。
Arduinoって素晴らしい。
Arduino UNOにはこのPWMアウトが6つあるので、
コントロールナンバーに対応して別々のアウトに
変換するコードを書けば、1台につき6個の自由自在に
制御できる0-5Vの信号が生成できる。
さて、次は6ポートフルに使って
動作確認できる何かを作ってみようか。
〈Arduino関連〉Arduino UNO |
コメントを残す