Position: Index > Unclassified >

Fun with Arduino - Midi Input Basics

2017-08-18 13:27  
Declaration:We aim to transmit more information by carrying articles . We will delete it soon, if we are involved in the problems of article content ,copyright or other problems.

 

Have you ever been working on a Arduino project and suddenly thought 'This thing could really use a MIDI Input'! This exact thing just happened to me. Not wanting to re-invent the wheel, I began searching around for a Library that would help. I came across the Arduino Midi Library which seemed to fit the bill. It took me a while to actually get the thing going, so I thought I would write a quick post outlining the steps to get a simple test circuit working. The following program and circuit will simply Flash the LED connected to Pin 13 on the Arduino Board when you press a note on a Midi Keyboard. But, that's really all you really need to confirm that you are correctly receiving Midi commands with your Arduino.

 

The Arduino Midi Library

First go to this Link and download the Arduino Midi Library files.

Unzip the downloaded folder. There are two folders inside. For Windows, copy the folder called "MIDI" and paste it into your Arduino "libraries" folder. Mine was located inside the "arduino-0022" folder. Quit and restart your Arduino IDE program. Go to the Menu and open Sketch > Import Library. You should see "MIDI" as one of the choices.

Copy and paste the code at the end of this article into a new Sketch. The code is commented, so give it a quick read through.

Here are some of the key commands:

MIDI.begin(MIDI_CHANNEL_OMNI);
This initializes the Midi Library. The MIDI_CHANNEL_OMNI parameter sets the library to listen to all Midi Channels. MIDI.begin(2) would set it to listen to Channel 2 only.

MDI.setHandleNoteOn(MyHandleNoteOn);
This is an import command! The Arduino Midi Library uses something called 'Callbacks'. When a Midi event occurs, the Library will Call a function to handle it. This command tells the Library to call the 'MyHandleNoteOn' function when a 'Note On' Midi event is detected. There are many callback functions in the Library to handle the many types of Midi events (Clock, Pitch Bend, Program Change, Etc..). Use the MIDI.set... command to point to the functions you require.
 
void MyHandleNoteOn(byte channel, byte pitch, byte velocity)
This is the function I created to be called when a Midi Note On event is detected. This is the 'meat' of your program.  In this test program, I just have it flash the LED on the Arduino board. But you could just as easily have it play a note on your home made Synth circuit, Flash a spotlight on your Midi controlled lighting rig, or even command your Midi controlled Robotic Gorilla to enter 'Rampage' Mode. The sky is the limit.

MIDI.read();
This is the only function in the main loop of the program. It just checks the input buffer for any received Midi commands and passes them to the correct function.


The Hardware

The MIDI standard spells out the circuit that should be used for a MIDI INPUT so lets look at that first.

 

This very simple circuit uses a 6N138 optocoupler chip. This device basically electrically isolates your circuit from the incoming Midi signal. The 1N914 diode protects the chip from an incorrectly wired Midi cable. Plug the output of the optocoupler (Pin 6) into the RX (Pin 0) socket on your arduino board. Note: Be sure to correctly identify pin 4 and 5 on the Midi In Jack.

Also note that the RX/TX pins and the USB Port on the Arduino Board share the same signals. So, you will need temporarily remove the wire from the RX Pin 0 on the Arduino Board to upload a program. Then remove the USB Cable from the computer and replace the RX wire when you run the program with a Midi Input.