Stage two of my further adventures in MIDI land. Using a single button to play a single note via MIDI. A MIDI.sendnoteon turns on a note which keeps playing unless otherwise instructed. To stop the note a second instruction is sent. MIDI.sendnoteoff
To do this you need to send a MIDI message whenever the state of the key changes. This is known as edge detection.
The switch in the centre of the breadboard acts as the key.
A 10k pull down resistor ensures that pin 8 on the Arduino board is kept low until the key is pressed.
// SingleButtonMIDI.ino // Driving MIDI using a single button // Rob Ives 2012 // This code is released into the Public Domain. #include <MIDI.h> #define KEY 8 #define LED 13 int keyispressed = 0; //Variable. Is the key currently pressed? int noteisplaying = 0; //Variable. Is the Note currently playing? void setup() //The Setup Loop { pinMode(LED, OUTPUT); //Set pin 13 , the led, to output pinMode(KEY, INPUT); //Set pin 8 to input to detect the key press MIDI.begin(); //initialise midi library } //--------------------------------------------- void loop() //the main loop { keyispressed = digitalRead(KEY); //read pin 8 if (keyispressed == HIGH){ //the key on the board is pressed digitalWrite(LED, HIGH); //set the LED to on. if(!noteisplaying){ //if the note is not already playing send MIDI instruction to start MIDI.sendNoteOn(36,127,1); // Send a Note (pitch 36 (C2), vel.127 ch. 1) noteisplaying = 1; // set the note playing flag to TRUE } } else{ digitalWrite(LED,LOW); // the key is not pressed. Turn off the LED if(noteisplaying){ //if the note is currently playing, turn it off MIDI.sendNoteOff(36,0,1); // Stop the note noteisplaying = 0; // clear the note is playing flag } } } |
Wire up the Arduino as shown and upload the Sketch. The unit will play a low C whenever the key is pressed. Works a treat for me even without switch de-bounce.
Where i can find “midi.h”
Check out the page on Arduino Playground here
Rob