Advertisement
HyperMitch

MIDI serial data from the Arduino to a MIDI interface

Jul 16th, 2014
304
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.54 KB | None | 0 0
  1. /*
  2.  * 7.1 Midi OUT controller
  3.  * roguescience.org
  4.  *
  5.  * digital pin 11 (OUTPUT/PWM) --> LED
  6.  * digital pin 2 (INPUT) <-- button
  7.  * analog pin 0 <-- pot 1
  8.  * analog pin 4 <-- pot 2
  9.  * analog pin 5 <-- pot 3
  10.  * tx1 <-- pin 5 (5 PIN DIN aka MIDI jack)
  11.  *
  12.  * Send a MIDI note when the button is pressed and sends MIDI
  13.  * CC data when a potentiometer is turned.
  14.  *
  15.  * LINK: http://www.roguescience.org/wordpress/building-a-midi-out-controller/part-7-add-a-midi-port/exercise-13/
  16.  *
  17.  */
  18.  
  19. int ledPin = 11;                //choose the pin for the LED - needs to be (3,5,6,9,10, or 11)
  20. int buttonPin = 2;              //choose the input pin for a pushbutton
  21. int buttonVal = 0;              //variable for reading the button status
  22. int buttonState = 0;            //variable to hold the buttons current state
  23. int bounceCheck = 0;            //variable for debouncing
  24. int THRESHOLD = 2;              //threshold amount
  25.  
  26.  
  27. int pot1Pin = 0;                //choose the input pin for a potentiometer #1 (pin 0)
  28. int pot1Val = 0;                //variable for reading potentiometer #1 value
  29. int mappedPot1Val = 0;          //variable for holding remapped pot value
  30. int prevPot1Val = 0;            //variable for storing our prev pot value
  31.  
  32. int pot2Pin = 4;                //choose the input pin for a potentiometer #2 (pin 4)
  33. int pot2Val = 0;                //variable for reading potentiometer #2 value
  34. int mappedPot2Val = 0;          //variable for holding remapped pot value
  35. int prevPot2Val = 0;            //variable for storing our prev pot value
  36.  
  37. int pot3Pin = 5;                //choose the input pin for a potentiometer #3 (pin 5)
  38. int pot3Val = 0;                //variable for reading potentiometer #3 value
  39. int mappedPot3Val = 0;          //variable for holding remapped pot value
  40. int prevPot3Val = 0;            //variable for storing our prev pot value
  41.  
  42. //--------------------
  43. //       Setup
  44. //--------------------
  45. void setup() {
  46.   pinMode(ledPin, OUTPUT);      //declare LED as output
  47.   pinMode(buttonPin, INPUT);    //declare pushbutton as input
  48.   Serial.begin(31250);          //MIDI communicates at 31250 baud
  49. }
  50.  
  51. void loop(){
  52.  
  53. //--------------------
  54. //     Button  #1
  55. //--------------------
  56.   buttonVal = digitalRead(buttonPin);     //read input value from button
  57.   delay(10);                              //wait 10ms
  58.   bounceCheck = digitalRead(buttonPin);   //check again
  59.   if(buttonVal == bounceCheck){           //if val is the same then not a bounce
  60.     if (buttonVal == HIGH && buttonState == 1) {   //check if the input is HIGH
  61.       digitalWrite(ledPin, LOW);         //turn LED OFF
  62.       midiOUT(0x90, 60, 0); //Note ON (CH 1), middle C, zero velocity turns note off
  63.       buttonState = 0;
  64.     }
  65.     if(buttonVal == LOW && buttonState == 0){
  66.       digitalWrite(ledPin, HIGH);       //turn LED ON
  67.       midiOUT(0x90, 60, 127); //Note ON (CH 1), middle C, velocity 127
  68.       buttonState = 1;
  69.     }
  70.  
  71.   }
  72.  
  73. //----------------------
  74. //   Potentiometer  #1
  75. //----------------------
  76.    pot1Val = analogRead(pot1Pin);                   //read input from potentiometer
  77.    mappedPot1Val = map(pot1Val, 0, 1023, 0, 127);       //map value to 0-127
  78.    if(abs(mappedPot1Val - prevPot1Val) >= THRESHOLD){
  79.      midiOUT(0xB0, 7, mappedPot1Val);               //Control Change (Ch 1), Controller 7 (Volume)
  80.      digitalWrite(ledPin, HIGH);
  81.      prevPot1Val = mappedPot1Val;
  82.    }
  83.    else{
  84.       digitalWrite(ledPin, LOW);
  85.    }
  86.  
  87. //----------------------
  88. //   Potentiometer  #2
  89. //----------------------
  90.    pot2Val = analogRead(pot2Pin);                   //read input from potentiometer
  91.    mappedPot2Val = map(pot2Val, 0, 1023, 0, 127);       //map value to 0-127
  92.    if(abs(mappedPot2Val - prevPot2Val) >= THRESHOLD){
  93.      midiOUT(0xB0, 4, mappedPot2Val);               //Control Change (Ch 1), Controller 4 (Foot Controller)
  94.      digitalWrite(ledPin, HIGH);
  95.      prevPot2Val = mappedPot2Val;
  96.    }
  97.    else{
  98.       digitalWrite(ledPin, LOW);
  99.    }
  100.  
  101. //----------------------
  102. //   Potentiometer  #3
  103. //----------------------
  104.    pot3Val = analogRead(pot3Pin);                   //read input from potentiometer
  105.    mappedPot3Val = map(pot3Val, 0, 1023, 0, 127);       //map value to 0-127
  106.    if(abs(mappedPot3Val - prevPot3Val) >= THRESHOLD){
  107.      midiOUT(0xB0, 1, mappedPot3Val);               //Control Change (Ch 1), Controller 1 (Modulation Wheel)
  108.      digitalWrite(ledPin, HIGH);
  109.      prevPot3Val = mappedPot3Val;
  110.    }
  111.    else{
  112.       digitalWrite(ledPin, LOW);
  113.    }
  114.  
  115. }
  116.  
  117. void midiOUT(char command, char value1, char value2) {
  118.   Serial.write(command);
  119.   Serial.write(value1);
  120.   Serial.write(value2);
  121.  
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement