Coding-styled examples.

This commit is contained in:
Francois Best 2012-09-27 21:51:05 +02:00
parent d8b0d6f838
commit e6da273119
5 changed files with 138 additions and 126 deletions

View File

@ -1,21 +1,22 @@
#include <MIDI.h> #include <MIDI.h>
/*
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() { #define LED 13 // LED pin on Arduino Uno
void setup()
{
pinMode(LED, OUTPUT); pinMode(LED, OUTPUT);
MIDI.begin(4); // Launch MIDI with default options MIDI.begin(4); // Launch MIDI and listen to channel 4
// input channel is set to 4
} }
void loop() { void loop()
if (MIDI.read()) { {
digitalWrite(LED,HIGH); // Blink the LED 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) MIDI.sendNoteOn(42,127,1); // Send a Note (pitch 42, velo 127 on channel 1)
delay(1000); // Wait for a second delay(1000); // Wait for a second
MIDI.sendNoteOff(42,0,1); // Stop the note MIDI.sendNoteOff(42,0,1); // Stop the note

View File

@ -1,5 +1,17 @@
#include <SoftwareSerial.h>
#define MIDI_AUTO_INSTANCIATE 0
#include <MIDI.h> #include <MIDI.h>
// 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_start = 0;
unsigned long gTime_stop = 0; unsigned long gTime_stop = 0;
unsigned gCounter = 0; unsigned gCounter = 0;
@ -7,10 +19,10 @@ unsigned long gTime_sum = 0;
unsigned long gTime_min = -1; unsigned long gTime_min = -1;
unsigned long gTime_max = 0; 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; const unsigned long diff = gTime_stop - gTime_start;
@ -21,8 +33,8 @@ void handleNoteOn(byte inChannel,byte inNote,byte inVelocity)
gCounter++; gCounter++;
if (gCounter >= 100) { if (gCounter >= 100)
{
const unsigned long average = gTime_sum / (float)gCounter; const unsigned long average = gTime_sum / (float)gCounter;
Serial.println("Time to receive NoteOn: "); Serial.println("Time to receive NoteOn: ");
@ -44,32 +56,26 @@ void handleNoteOn(byte inChannel,byte inNote,byte inVelocity)
gTime_max = 0; gTime_max = 0;
gTime_min = -1; gTime_min = -1;
MIDI.turnThruOff(); softMidi.turnThruOff();
} }
} }
// -----------------------------------------------------------------------------
void setup() void setup()
{ {
softMidi.begin();
MIDI.begin();
Serial.begin(38400); Serial.begin(38400);
Serial.print("MCU Ready"); Serial.print("Arduino Ready");
MIDI.sendNoteOn(69,127,1);
softMidi.sendNoteOn(69,127,1);
} }
void loop() void loop()
{ {
gTime_start = micros(); gTime_start = micros();
softMidi.read();
MIDI.read();
} }

View File

@ -1,6 +1,5 @@
#include <MIDI.h> #include <MIDI.h>
// This function will be automatically called when a NoteOn is received. // This function will be automatically called when a NoteOn is received.
// It must be a void-returning function with the correct parameters, // It must be a void-returning function with the correct parameters,
// see documentation here: // see documentation here:
@ -10,30 +9,36 @@ 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) { if (velocity == 0)
{
// This acts like a NoteOff. // This acts like a NoteOff.
} }
// Try to keep your callbacks short (no delays ect) as the contrary would slow down the loop() // Try to keep your callbacks short (no delays ect)
// and have a bad impact on real-time performance. // otherwise it would slow down the loop() and have a bad impact
// on real-time performance.
} }
void setup() { // -----------------------------------------------------------------------------
void setup()
{
// Initiate MIDI communications, listen to all channels // Initiate MIDI communications, listen to all channels
MIDI.begin(MIDI_CHANNEL_OMNI); MIDI.begin(MIDI_CHANNEL_OMNI);
// Connect the HandleNoteOn function to the library, so it is called upon reception of a NoteOn. // 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 MIDI.setHandleNoteOn(HandleNoteOn); // Put only the name of the function
} }
void loop() { void loop()
{
// Call MIDI.read the fastest you can for real-time performance. // Call MIDI.read the fastest you can for real-time performance.
MIDI.read(); MIDI.read();
// There is no need to check if there are messages incoming if they are bound to a Callback function. // There is no need to check if there are messages incoming
// The attached method will be called automatically when the corresponding message has been received. // if they are bound to a Callback function.
// The attached method will be called automatically
// when the corresponding message has been received.
} }

View File

@ -41,5 +41,3 @@ void loop()
midiB.getChannel()); midiB.getChannel());
} }
} }

View File

@ -1,18 +1,16 @@
#include <MIDI.h> #include <MIDI.h>
/*
MIDI Input tutorial
by Franky
28/07/2009
NOTE: for easier MIDI input reading, // This example shows the old way of checking for input messages.
take a look a the Callbacks example. // It's simpler to use the callbacks now, check out the dedicated example.
*/ #define LED 13 // LED pin on Arduino Uno
#define LED 13 // LED pin on Arduino board // -----------------------------------------------------------------------------
void BlinkLed(byte num) { // Basic blink function void BlinkLed(byte num) // Basic blink function
for (byte i=0;i<num;i++) { {
for (byte i=0;i<num;i++)
{
digitalWrite(LED,HIGH); digitalWrite(LED,HIGH);
delay(50); delay(50);
digitalWrite(LED,LOW); digitalWrite(LED,LOW);
@ -20,18 +18,22 @@ void BlinkLed(byte num) { // Basic blink function
} }
} }
// -----------------------------------------------------------------------------
void setup() { void setup()
{
pinMode(LED, OUTPUT); pinMode(LED, OUTPUT);
MIDI.begin(); // Launch MIDI with default options MIDI.begin(); // Launch MIDI, by default listening to channel 1.
// (input channel is default set to 1)
} }
void loop() { void loop()
if (MIDI.read()) { // Is there a MIDI message incoming ? {
switch(MIDI.getType()) { // Get the type of the message we caught if (MIDI.read()) // Is there a MIDI message incoming ?
case midi::ProgramChange: // If it is a Program Change {
BlinkLed(MIDI.getData1()); // Blink the LED a number of times switch(MIDI.getType()) // Get the type of the message we caught
{
case midi::ProgramChange: // If it is a Program Change,
BlinkLed(MIDI.getData1()); // blink the LED a number of times
// correponding to the program number // correponding to the program number
// (0 to 127, it can last a while..) // (0 to 127, it can last a while..)
break; break;