see http://mbed.org/users/okini3939/notebook/midi/
Dependencies: MIDI USBDevice mbed
Fork of MIDI_sample by
Diff: main.cpp
- Revision:
- 1:ecf5c3927710
- Parent:
- 0:1a4d28e63bef
--- a/main.cpp Mon Dec 03 14:24:33 2012 +0000 +++ b/main.cpp Tue Feb 05 00:12:25 2013 +0000 @@ -1,20 +1,70 @@ -#include "mbed.h" -#include "MIDI.h" - -DigitalOut led1(LED1), led2(LED2); - -MIDI midi(p9, p10); - -int main() { - midi.begin(4); - - for (;;) { - if (midi.read()) { - led1 = 1; - midi.sendNoteOn(42,127,1); // Send a Note (pitch 42, velo 127 on channel 1) - wait(1); - midi.sendNoteOn(42,0,1); // Stop the note - led1 = 0; - } - } -} +#include "mbed.h" +#include "USBMIDI.h" +#include "MIDI.h" + +DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4); +Serial pc(USBTX, USBRX); + +USBMIDI usbmidi; +MIDI midi(p9, p10); + +void show_message(MIDIMessage msg) { + switch (msg.type()) { + case MIDIMessage::NoteOffType: + midi.sendNoteOff(msg.key(), msg.pitch(), msg.channel()); + break; + case MIDIMessage::NoteOnType: + midi.sendNoteOn(msg.key(), msg.pitch(), msg.channel()); + break; + case MIDIMessage::PolyphonicAftertouchType: + midi.sendPolyPressure(msg.key(), msg.pressure(), msg.channel()); + break; + case MIDIMessage::ControlChangeType: + midi.sendControlChange(msg.controller(), msg.value(), msg.channel()); + break; + case MIDIMessage::ProgramChangeType: + midi.sendProgramChange(msg.program(), msg.channel()); + break; + case MIDIMessage::ChannelAftertouchType: + midi.sendAfterTouch(msg.pressure(), msg.channel()); + break; + case MIDIMessage::PitchWheelType: + midi.sendPitchBend(msg.pitch(), msg.channel()); + break; + case MIDIMessage::AllNotesOffType: + midi.sendControlChange(123, 0, msg.channel()); + break; + case MIDIMessage::ErrorType: + default: + led4 = 1; + break; + } + led3 = 1; +} + +void isr_t () { + led2 = 0; + led3 = 0; + led4 = 0; +} + +int main() { + Ticker t; + + led1 = 1; + usbmidi.attach(show_message); + midi.begin(); + t.attach(isr_t, 0.1); + + for (;;) { + if (midi.read()) { + MIDIMessage msg; + msg.data[0] = CABLE_NUM | (midi.getType() >> 4); + msg.data[1] = midi.getType() | midi.getChannel(); + msg.data[2] = midi.getData1(); + msg.data[3] = midi.getData2(); + usbmidi.write(msg); + led2 = 1; + } + } +}