ブレッドボード配線図
Nucleo F446REにはSerialが複数あるので、今回はSerial 2を使用しました。NucleoのArduino HeaderのD2(RX)、D10(TX)です。Serial 1はプログラミングやPCとのSerial通信に使用します。
ファームウェア <main.cpp>
#include "mbed.h" #include "MIDI.h" #define TITLE_STR1 ("MIDI Message") #define TITLE_STR2 ("20180502") MIDI midi(D10, D2); // Serail2 Serial pc(D1, D0); // Serial1 // ----------------------------------------------------------------------------- void printNoteOnOff(const char* type, byte inChannel, byte inNote, byte inVelocity) { pc.printf("%s %3d %3d %3d\r\n", type, inChannel, inNote, inVelocity); } void handleNoteOn(byte inChannel, byte inNote, byte inVelocity) { midi.sendNoteOn(inNote, inVelocity, inChannel); printNoteOnOff("On ", inChannel, inNote, inVelocity); } void handleNoteOff(byte inChannel, byte inNote, byte inVelocity) { midi.sendNoteOff(inNote, inVelocity, inChannel); printNoteOnOff("Off", inChannel, inNote, inVelocity); } // ----------------------------------------------------------------------------- int main() { midi.setHandleNoteOn(handleNoteOn); midi.setHandleNoteOff(handleNoteOff); midi.begin(MIDI_CHANNEL_OMNI); pc.baud(115200); for (;;) { if (midi.read()) { byte type = midi.getType(); byte channel = midi.getChannel(); byte data1 = midi.getData1(); byte data2 = midi.getData2(); pc.printf("%2x %2x %2x %2x\r\n", type, channel, data1, data2); } } }
mbed repository
https://os.mbed.com/users/ryood/code/MIDI_Display_Message/
動作としては、MIDI IN(D2)で受信したMIDIメッセージをMIDI OUT(D10)にオウム返しし、SerialでPCに送信するものです。
Puttyで受信
送受信のようす
ch1:MIDI IN ch2:MIDI OUT
Nucleoは3.3V駆動なので、MIDI OUTの信号レベルが3.3Vになっています。MIDIの受信はフォトカプラで受けることになっているので3.3Vでも大丈夫なようですが、できれば5V系にレベル・シフトしておいた方よさそうです。
0 件のコメント:
コメントを投稿