ドラムマシンの修理 vol.7
前回、MIDI信号をArduinoで受信できなかったので、問題点を探していってみます。
まずはハード側から。
DIN端子からフォトカプラのArduino側まで信号を検証しました。
信号自体は伝わっているのですが、電圧が5Vになるところ500mVになっいました。
原因がわからないので別のフォトカプラを使い、回路を作り直しました。
(こちらのページを参考にさせてもらいました。)
これで再び計測しても同じ症状となり困っていたのですが、結局オシロスコープのプローブの減衰率がx10となっているのが原因でした。
最初の回路でも5Vの信号が問題なく伝わっていたようです。
次にソフト側を探ってみます。
Arduinoに書き込んだコードをチェックすると、一箇所問題がありました。
MIDIライブラリのインスタンスを作成する以下の部分に間違いがありました。
MIDI_CREATE_DEFAULT_INSTANCE();
MIDI信号をUSBケーブル経由でなく、ハードウェア(RXピン)側から受信する場合、明示してインスタンスを作成する必要があるようです。
正しいコードは以下となりました。
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI);
不要なコードを整理し、全体コードは以下となりました。
#include <MIDI.h>
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI);
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
MIDI.begin(MIDI_CHANNEL_OMNI);
}
void loop()
{
if (MIDI.read())
{
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
digitalWrite(LED_BUILTIN, LOW);
Serial.print("on");
delay(100);
}
}
これでArduinoでMIDI信号の受信ができました。
次はハード側でキック、スネアなど各音を任意のタイミングで出力できるように改造していきます。