Simon Ford
/
USBMIDI_DrumExample
Simple example for triggering actuators based on midi signals
main.cpp@0:040c2c8ca5eb, 2011-02-20 (annotated)
- Committer:
- simon
- Date:
- Sun Feb 20 16:48:11 2011 +0000
- Revision:
- 0:040c2c8ca5eb
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
simon | 0:040c2c8ca5eb | 1 | // Drums via MIDI! |
simon | 0:040c2c8ca5eb | 2 | #include "mbed.h" |
simon | 0:040c2c8ca5eb | 3 | #include "USBMIDI.h" |
simon | 0:040c2c8ca5eb | 4 | |
simon | 0:040c2c8ca5eb | 5 | DigitalOut drum[] = {p5, p6, p7, p8}; // the four outputs |
simon | 0:040c2c8ca5eb | 6 | |
simon | 0:040c2c8ca5eb | 7 | void drums(int id, bool on) { |
simon | 0:040c2c8ca5eb | 8 | if(id >= 0 && id <= 3) { |
simon | 0:040c2c8ca5eb | 9 | drum[id] = on; |
simon | 0:040c2c8ca5eb | 10 | } |
simon | 0:040c2c8ca5eb | 11 | } |
simon | 0:040c2c8ca5eb | 12 | |
simon | 0:040c2c8ca5eb | 13 | void do_message(MIDIMessage msg) { |
simon | 0:040c2c8ca5eb | 14 | switch (msg.type()) { |
simon | 0:040c2c8ca5eb | 15 | case MIDIMessage::NoteOnType: |
simon | 0:040c2c8ca5eb | 16 | drums(msg.key() - 64, msg.velocity() != 0); |
simon | 0:040c2c8ca5eb | 17 | break; |
simon | 0:040c2c8ca5eb | 18 | case MIDIMessage::NoteOffType: |
simon | 0:040c2c8ca5eb | 19 | drums(msg.key() - 64, 0); |
simon | 0:040c2c8ca5eb | 20 | break; |
simon | 0:040c2c8ca5eb | 21 | } |
simon | 0:040c2c8ca5eb | 22 | } |
simon | 0:040c2c8ca5eb | 23 | |
simon | 0:040c2c8ca5eb | 24 | USBMIDI midi; |
simon | 0:040c2c8ca5eb | 25 | |
simon | 0:040c2c8ca5eb | 26 | int main() { |
simon | 0:040c2c8ca5eb | 27 | midi.attach(do_message); // call back for messages received |
simon | 0:040c2c8ca5eb | 28 | while (1); |
simon | 0:040c2c8ca5eb | 29 | } |