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>
/*
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);
MIDI.begin(4); // Launch MIDI with default options
// input channel is set to 4
MIDI.begin(4); // Launch MIDI and listen to channel 4
}
void loop() {
if (MIDI.read()) {
digitalWrite(LED,HIGH); // Blink the LED
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

View File

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

View File

@ -1,6 +1,5 @@
#include <MIDI.h>
// 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:
@ -10,30 +9,36 @@ void HandleNoteOn(byte channel, byte pitch, byte velocity)
{
// Do whatever you want when you receive a Note On.
if (velocity == 0) {
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.
// 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() {
// -----------------------------------------------------------------------------
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.
// 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() {
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.
}

View File

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

View File

@ -1,18 +1,16 @@
#include <MIDI.h>
/*
MIDI Input tutorial
by Franky
28/07/2009
NOTE: for easier MIDI input reading,
take a look a the Callbacks example.
// This example shows the old way of checking for input messages.
// 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
for (byte i=0;i<num;i++) {
void BlinkLed(byte num) // Basic blink function
{
for (byte i=0;i<num;i++)
{
digitalWrite(LED,HIGH);
delay(50);
digitalWrite(LED,LOW);
@ -20,18 +18,22 @@ void BlinkLed(byte num) { // Basic blink function
}
}
// -----------------------------------------------------------------------------
void setup() {
void setup()
{
pinMode(LED, OUTPUT);
MIDI.begin(); // Launch MIDI with default options
// (input channel is default set to 1)
MIDI.begin(); // Launch MIDI, by default listening to channel 1.
}
void loop() {
if (MIDI.read()) { // Is there a MIDI message incoming ?
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
void loop()
{
if (MIDI.read()) // Is there a MIDI message incoming ?
{
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
// (0 to 127, it can last a while..)
break;