Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * 7.1 Midi OUT controller
- * roguescience.org
- *
- * digital pin 11 (OUTPUT/PWM) --> LED
- * digital pin 2 (INPUT) <-- button
- * analog pin 0 <-- pot 1
- * analog pin 4 <-- pot 2
- * analog pin 5 <-- pot 3
- * tx1 <-- pin 5 (5 PIN DIN aka MIDI jack)
- *
- * Send a MIDI note when the button is pressed and sends MIDI
- * CC data when a potentiometer is turned.
- *
- * LINK: http://www.roguescience.org/wordpress/building-a-midi-out-controller/part-7-add-a-midi-port/exercise-13/
- *
- */
- int ledPin = 11; //choose the pin for the LED - needs to be (3,5,6,9,10, or 11)
- int buttonPin = 2; //choose the input pin for a pushbutton
- int buttonVal = 0; //variable for reading the button status
- int buttonState = 0; //variable to hold the buttons current state
- int bounceCheck = 0; //variable for debouncing
- int THRESHOLD = 2; //threshold amount
- int pot1Pin = 0; //choose the input pin for a potentiometer #1 (pin 0)
- int pot1Val = 0; //variable for reading potentiometer #1 value
- int mappedPot1Val = 0; //variable for holding remapped pot value
- int prevPot1Val = 0; //variable for storing our prev pot value
- int pot2Pin = 4; //choose the input pin for a potentiometer #2 (pin 4)
- int pot2Val = 0; //variable for reading potentiometer #2 value
- int mappedPot2Val = 0; //variable for holding remapped pot value
- int prevPot2Val = 0; //variable for storing our prev pot value
- int pot3Pin = 5; //choose the input pin for a potentiometer #3 (pin 5)
- int pot3Val = 0; //variable for reading potentiometer #3 value
- int mappedPot3Val = 0; //variable for holding remapped pot value
- int prevPot3Val = 0; //variable for storing our prev pot value
- //--------------------
- // Setup
- //--------------------
- void setup() {
- pinMode(ledPin, OUTPUT); //declare LED as output
- pinMode(buttonPin, INPUT); //declare pushbutton as input
- Serial.begin(31250); //MIDI communicates at 31250 baud
- }
- void loop(){
- //--------------------
- // Button #1
- //--------------------
- buttonVal = digitalRead(buttonPin); //read input value from button
- delay(10); //wait 10ms
- bounceCheck = digitalRead(buttonPin); //check again
- if(buttonVal == bounceCheck){ //if val is the same then not a bounce
- if (buttonVal == HIGH && buttonState == 1) { //check if the input is HIGH
- digitalWrite(ledPin, LOW); //turn LED OFF
- midiOUT(0x90, 60, 0); //Note ON (CH 1), middle C, zero velocity turns note off
- buttonState = 0;
- }
- if(buttonVal == LOW && buttonState == 0){
- digitalWrite(ledPin, HIGH); //turn LED ON
- midiOUT(0x90, 60, 127); //Note ON (CH 1), middle C, velocity 127
- buttonState = 1;
- }
- }
- //----------------------
- // Potentiometer #1
- //----------------------
- pot1Val = analogRead(pot1Pin); //read input from potentiometer
- mappedPot1Val = map(pot1Val, 0, 1023, 0, 127); //map value to 0-127
- if(abs(mappedPot1Val - prevPot1Val) >= THRESHOLD){
- midiOUT(0xB0, 7, mappedPot1Val); //Control Change (Ch 1), Controller 7 (Volume)
- digitalWrite(ledPin, HIGH);
- prevPot1Val = mappedPot1Val;
- }
- else{
- digitalWrite(ledPin, LOW);
- }
- //----------------------
- // Potentiometer #2
- //----------------------
- pot2Val = analogRead(pot2Pin); //read input from potentiometer
- mappedPot2Val = map(pot2Val, 0, 1023, 0, 127); //map value to 0-127
- if(abs(mappedPot2Val - prevPot2Val) >= THRESHOLD){
- midiOUT(0xB0, 4, mappedPot2Val); //Control Change (Ch 1), Controller 4 (Foot Controller)
- digitalWrite(ledPin, HIGH);
- prevPot2Val = mappedPot2Val;
- }
- else{
- digitalWrite(ledPin, LOW);
- }
- //----------------------
- // Potentiometer #3
- //----------------------
- pot3Val = analogRead(pot3Pin); //read input from potentiometer
- mappedPot3Val = map(pot3Val, 0, 1023, 0, 127); //map value to 0-127
- if(abs(mappedPot3Val - prevPot3Val) >= THRESHOLD){
- midiOUT(0xB0, 1, mappedPot3Val); //Control Change (Ch 1), Controller 1 (Modulation Wheel)
- digitalWrite(ledPin, HIGH);
- prevPot3Val = mappedPot3Val;
- }
- else{
- digitalWrite(ledPin, LOW);
- }
- }
- void midiOUT(char command, char value1, char value2) {
- Serial.write(command);
- Serial.write(value1);
- Serial.write(value2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement