From e6da273119e750eb9c47af58bab80d0bdd487959 Mon Sep 17 00:00:00 2001 From: Francois Best Date: Thu, 27 Sep 2012 21:51:05 +0200 Subject: [PATCH] Coding-styled examples. --- res/Examples/MIDI_Basic_IO/MIDI_Basic_IO.ino | 37 +++---- res/Examples/MIDI_Bench/MIDI_Bench.ino | 98 ++++++++++--------- .../MIDI_Callbacks/MIDI_Callbacks.ino | 47 +++++---- .../MIDI_DualMerger/MIDI_DualMerger.ino | 8 +- res/Examples/MIDI_Input/MIDI_Input.ino | 74 +++++++------- 5 files changed, 138 insertions(+), 126 deletions(-) diff --git a/res/Examples/MIDI_Basic_IO/MIDI_Basic_IO.ino b/res/Examples/MIDI_Basic_IO/MIDI_Basic_IO.ino index 161b67f..c40a666 100644 --- a/res/Examples/MIDI_Basic_IO/MIDI_Basic_IO.ino +++ b/res/Examples/MIDI_Basic_IO/MIDI_Basic_IO.ino @@ -1,24 +1,25 @@ #include -/* - Basic I/O MIDI tutorial - by Franky - 28/07/2009 -*/ -#define LED 13 // LED pin on Arduino board +// Simple tutorial on how to receive and send MIDI messages. +// Here, when receiving any message on channel 4, the Arduino +// will blink a led and play back a note for 1 second. -void setup() { - pinMode(LED, OUTPUT); - MIDI.begin(4); // Launch MIDI with default options - // input channel is set to 4 +#define LED 13 // LED pin on Arduino Uno + +void setup() +{ + pinMode(LED, OUTPUT); + MIDI.begin(4); // Launch MIDI and listen to channel 4 } -void loop() { - if (MIDI.read()) { - digitalWrite(LED,HIGH); // Blink the LED - MIDI.sendNoteOn(42,127,1); // Send a Note (pitch 42, velo 127 on channel 1) - delay(1000); // Wait for a second - MIDI.sendNoteOff(42,0,1); // Stop the note - digitalWrite(LED,LOW); - } +void loop() +{ + if (MIDI.read()) // If we have received a message + { + digitalWrite(LED,HIGH); + MIDI.sendNoteOn(42,127,1); // Send a Note (pitch 42, velo 127 on channel 1) + delay(1000); // Wait for a second + MIDI.sendNoteOff(42,0,1); // Stop the note + digitalWrite(LED,LOW); + } } diff --git a/res/Examples/MIDI_Bench/MIDI_Bench.ino b/res/Examples/MIDI_Bench/MIDI_Bench.ino index 301b395..0b3061b 100644 --- a/res/Examples/MIDI_Bench/MIDI_Bench.ino +++ b/res/Examples/MIDI_Bench/MIDI_Bench.ino @@ -1,5 +1,17 @@ +#include +#define MIDI_AUTO_INSTANCIATE 0 #include +// This program demonstrates how to use two serial ports at a time, +// the hardware serial being used for sending messages to the computer, +// while MIDI is handled on a software serial port. +// This program measures the time spent to receive and parse a message. + +// ----------------------------------------------------------------------------- + +SoftwareSerial midiSerial(2,3); +MIDI_CREATE_INSTANCE(SoftwareSerial, midiSerial, softMidi); + unsigned long gTime_start = 0; unsigned long gTime_stop = 0; unsigned gCounter = 0; @@ -7,69 +19,63 @@ unsigned long gTime_sum = 0; unsigned long gTime_min = -1; unsigned long gTime_max = 0; +// ----------------------------------------------------------------------------- -void handleNoteOn(byte inChannel,byte inNote,byte inVelocity) +void handleNoteOn(byte inChannel, byte inNote, byte inVelocity) { + gTime_stop = micros(); - gTime_stop = micros(); + const unsigned long diff = gTime_stop - gTime_start; + gTime_sum += diff; - const unsigned long diff = gTime_stop - gTime_start; - gTime_sum += diff; + if (diff > gTime_max) gTime_max = diff; + if (diff < gTime_min) gTime_min = diff; - if (diff > gTime_max) gTime_max = diff; - if (diff < gTime_min) gTime_min = diff; - - gCounter++; - - if (gCounter >= 100) { - - const unsigned long average = gTime_sum / (float)gCounter; - - Serial.println("Time to receive NoteOn: "); - - Serial.print("Average: "); - Serial.print(average); - Serial.println(" microsecs"); - - Serial.print("Min: "); - Serial.print(gTime_min); - Serial.println(" microsecs"); - - Serial.print("Max: "); - Serial.print(gTime_max); - Serial.println(" microsecs"); - - gCounter = 0; - gTime_sum = 0; - gTime_max = 0; - gTime_min = -1; - - MIDI.turnThruOff(); - - } + gCounter++; + if (gCounter >= 100) + { + const unsigned long average = gTime_sum / (float)gCounter; + + Serial.println("Time to receive NoteOn: "); + + Serial.print("Average: "); + Serial.print(average); + Serial.println(" microsecs"); + + Serial.print("Min: "); + Serial.print(gTime_min); + Serial.println(" microsecs"); + + Serial.print("Max: "); + Serial.print(gTime_max); + Serial.println(" microsecs"); + + gCounter = 0; + gTime_sum = 0; + gTime_max = 0; + gTime_min = -1; + + softMidi.turnThruOff(); + } } +// ----------------------------------------------------------------------------- void setup() { + softMidi.begin(); - MIDI.begin(); - - Serial.begin(38400); - Serial.print("MCU Ready"); - - MIDI.sendNoteOn(69,127,1); + Serial.begin(38400); + Serial.print("Arduino Ready"); + softMidi.sendNoteOn(69,127,1); } void loop() { - - gTime_start = micros(); - - MIDI.read(); - + gTime_start = micros(); + softMidi.read(); } diff --git a/res/Examples/MIDI_Callbacks/MIDI_Callbacks.ino b/res/Examples/MIDI_Callbacks/MIDI_Callbacks.ino index b2bdb3d..475c177 100644 --- a/res/Examples/MIDI_Callbacks/MIDI_Callbacks.ino +++ b/res/Examples/MIDI_Callbacks/MIDI_Callbacks.ino @@ -1,6 +1,5 @@ #include - // This function will be automatically called when a NoteOn is received. // It must be a void-returning function with the correct parameters, // see documentation here: @@ -8,32 +7,38 @@ void HandleNoteOn(byte channel, byte pitch, byte velocity) { - // Do whatever you want when you receive a Note On. + // Do whatever you want when you receive a Note On. - if (velocity == 0) { - // This acts like a NoteOff. - } - - // Try to keep your callbacks short (no delays ect) as the contrary would slow down the loop() - // and have a bad impact on real-time performance. + if (velocity == 0) + { + // This acts like a NoteOff. + } + + // Try to keep your callbacks short (no delays ect) + // otherwise it would slow down the loop() and have a bad impact + // on real-time performance. } -void setup() { - // Initiate MIDI communications, listen to all channels - MIDI.begin(MIDI_CHANNEL_OMNI); - - // Connect the HandleNoteOn function to the library, so it is called upon reception of a NoteOn. - MIDI.setHandleNoteOn(HandleNoteOn); // Put only the name of the function +// ----------------------------------------------------------------------------- + +void setup() +{ + // Initiate MIDI communications, listen to all channels + MIDI.begin(MIDI_CHANNEL_OMNI); + // Connect the HandleNoteOn function to the library, + // so it is called upon reception of a NoteOn. + MIDI.setHandleNoteOn(HandleNoteOn); // Put only the name of the function } -void loop() { - // Call MIDI.read the fastest you can for real-time performance. - MIDI.read(); +void loop() +{ + // Call MIDI.read the fastest you can for real-time performance. + MIDI.read(); - // There is no need to check if there are messages incoming if they are bound to a Callback function. - // The attached method will be called automatically when the corresponding message has been received. + // There is no need to check if there are messages incoming + // if they are bound to a Callback function. + // The attached method will be called automatically + // when the corresponding message has been received. } - - diff --git a/res/Examples/MIDI_DualMerger/MIDI_DualMerger.ino b/res/Examples/MIDI_DualMerger/MIDI_DualMerger.ino index b98c4e2..edff690 100644 --- a/res/Examples/MIDI_DualMerger/MIDI_DualMerger.ino +++ b/res/Examples/MIDI_DualMerger/MIDI_DualMerger.ino @@ -14,9 +14,9 @@ MIDI_CREATE_INSTANCE(SoftwareSerial, softSerial, midiB); void setup() { - // Initiate MIDI communications, listen to all channels - midiA.begin(MIDI_CHANNEL_OMNI); - midiB.begin(MIDI_CHANNEL_OMNI); + // Initiate MIDI communications, listen to all channels + midiA.begin(MIDI_CHANNEL_OMNI); + midiB.begin(MIDI_CHANNEL_OMNI); } void loop() @@ -41,5 +41,3 @@ void loop() midiB.getChannel()); } } - - diff --git a/res/Examples/MIDI_Input/MIDI_Input.ino b/res/Examples/MIDI_Input/MIDI_Input.ino index 0187a62..e1bf0a9 100644 --- a/res/Examples/MIDI_Input/MIDI_Input.ino +++ b/res/Examples/MIDI_Input/MIDI_Input.ino @@ -1,43 +1,45 @@ #include -/* - MIDI Input tutorial - by Franky - 28/07/2009 - - NOTE: for easier MIDI input reading, - take a look a the Callbacks example. - -*/ -#define LED 13 // LED pin on Arduino board +// This example shows the old way of checking for input messages. +// It's simpler to use the callbacks now, check out the dedicated example. -void BlinkLed(byte num) { // Basic blink function - for (byte i=0;i