Lukas
12 years ago
1 changed files with 92 additions and 0 deletions
@ -0,0 +1,92 @@ |
|||||
|
#include <SoftwareSerial.h>
|
||||
|
|
||||
|
// RX, TX for MIDI out
|
||||
|
SoftwareSerial MIDI(10, 11); |
||||
|
|
||||
|
//button pin
|
||||
|
const int switchPin = 6; |
||||
|
//rotary encoder pins
|
||||
|
const int encAPin = 4; |
||||
|
const int encBPin = 5; |
||||
|
|
||||
|
//for sending note-off once after button is released
|
||||
|
boolean btnOff = false; |
||||
|
|
||||
|
//old rotary encoder value
|
||||
|
int encA = LOW; |
||||
|
//read rotary encoder value
|
||||
|
int enc = HIGH; |
||||
|
|
||||
|
void setup() |
||||
|
{ |
||||
|
//printing baudrate
|
||||
|
Serial.begin(9600); |
||||
|
//MIDI baudrate for software serial (pin 10 & 11)
|
||||
|
MIDI.begin(31250); |
||||
|
//button and encoder pins as input
|
||||
|
pinMode(switchPin, INPUT); |
||||
|
pinMode(encAPin, INPUT); |
||||
|
pinMode(encBPin, INPUT); |
||||
|
//activate pullup-resistors (read value is inverted, so LOW is active)
|
||||
|
digitalWrite(switchPin, HIGH); |
||||
|
digitalWrite(encAPin, HIGH); |
||||
|
digitalWrite(encBPin, HIGH); |
||||
|
} |
||||
|
|
||||
|
void loop() // run over and over
|
||||
|
{ |
||||
|
//print incoming bytes on softwareserial, just for checking MIDI-in, worked
|
||||
|
if (MIDI.available()) |
||||
|
Serial.println(MIDI.read()); |
||||
|
|
||||
|
//check if button is pressed
|
||||
|
if (digitalRead(switchPin) == LOW) |
||||
|
{ |
||||
|
if (!btnOff) { |
||||
|
//send note on
|
||||
|
midiSignal(144,60,100); |
||||
|
btnOff = true; |
||||
|
} |
||||
|
} |
||||
|
if (digitalRead(switchPin) == HIGH) |
||||
|
{ |
||||
|
//send note off
|
||||
|
if (btnOff) { |
||||
|
midiSignal(128,60,0); |
||||
|
btnOff = false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
//read encoder pin A
|
||||
|
enc = digitalRead(encAPin); |
||||
|
//check if rotary encoder is turned
|
||||
|
if ((encA == HIGH) && (enc == LOW)) { |
||||
|
//check direction of turning
|
||||
|
if (digitalRead(encBPin) == HIGH) { |
||||
|
//send note on and note off directly, so signal is send on every turn
|
||||
|
midiSignal(144,62,100); |
||||
|
midiSignal(128,62,100); |
||||
|
} else { |
||||
|
//other direction, other note value
|
||||
|
midiSignal(144,61,100); |
||||
|
midiSignal(128,61,100); |
||||
|
} |
||||
|
} |
||||
|
//save "old" encoder value
|
||||
|
encA = enc; |
||||
|
} |
||||
|
|
||||
|
//send MIDI signal through softwareserial
|
||||
|
void midiSignal(byte b1, byte b2, byte b3) { |
||||
|
//debug printing
|
||||
|
Serial.print("send: "); |
||||
|
Serial.print(b1); |
||||
|
Serial.print(" | "); |
||||
|
Serial.print(b2); |
||||
|
Serial.print(" | "); |
||||
|
Serial.print(b3); |
||||
|
Serial.println(""); |
||||
|
MIDI.write(b1); |
||||
|
MIDI.write(b2); |
||||
|
MIDI.write(b2); |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue