飽きた訳ではないのだよ。時間が取れなかったのだ。
…と前置きをした所でものすごく久々の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 |


ArduinoをUSB-MIDIデバイス化してDAWでLED目ん玉コントロール | Home Made Garbage へ返信する コメントをキャンセル