Created
December 4, 2018 17:30
-
-
Save EvanBurnette/7c9aa9fbd500c2fc14ddb1219aeeb60f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int last2 = HIGH; | |
int last3 = HIGH; | |
int last4 = HIGH; | |
int last5 = HIGH; | |
int last6 = HIGH; | |
int now2 = HIGH; | |
int now3 = HIGH; | |
int now4 = HIGH; | |
int now5 = HIGH; | |
int now6 = HIGH; | |
byte bank = 0; | |
byte startStopBit = 0; | |
byte midiStart = 0xFA; | |
byte midiStop = 0xFC; | |
byte statusControl = 0xB9; | |
byte initControl = 0x20; | |
byte endControl = 0x63; | |
int hold2 = 0; | |
int hold3 = 0; | |
int midiClock = 1; | |
#include <SoftwareSerial.h> | |
SoftwareSerial midiSerial(11, 12); | |
void setup() { | |
midiSerial.begin(31250); | |
pinMode(2, INPUT); | |
pinMode(3, INPUT); | |
pinMode(4, INPUT); | |
pinMode(5, INPUT); | |
pinMode(6, INPUT); | |
digitalWrite(2, HIGH); | |
digitalWrite(3, HIGH); | |
digitalWrite(4, HIGH); | |
digitalWrite(5, HIGH); | |
digitalWrite(6, HIGH); | |
pinMode(13, OUTPUT); | |
} | |
void send2(byte byte1, byte byte2){ | |
midiSerial.write(byte1); | |
midiSerial.write(byte2); | |
} | |
void send3(byte byte1, byte byte2, byte byte3){ | |
midiSerial.write(byte1); | |
midiSerial.write(byte2); | |
midiSerial.write(byte3); | |
} | |
void bankSelect (int select){ | |
bank = bank + select; | |
send3(0xB9, 0x20, bank >> 7); | |
send2(0xC9, bank&127); | |
} | |
void startStop(){ | |
if (startStopBit == 0){ | |
startStopBit = 1; | |
send2(0xB9, 0xFA); | |
} | |
else{ | |
startStopBit = 0; | |
send2(0xB9, 0xFC); | |
midiClock = 1; | |
} | |
} | |
void loop() { | |
now2 = digitalRead(2); | |
now3 = digitalRead(3); | |
now4 = digitalRead(4); | |
now5 = digitalRead(5); | |
now6 = digitalRead(6); | |
if (now2 == LOW && last2 == HIGH){ | |
bankSelect(1); | |
} | |
if (now2 == LOW && last2 == LOW){ | |
hold2 ++; | |
if (hold2 > 10){ | |
bankSelect(1); | |
} | |
} | |
if (now2 == HIGH && last2 == LOW){ | |
hold2 = 0; | |
} | |
if (now3 == LOW && last3 == HIGH){ | |
bankSelect(-1); | |
} | |
if (now3 == LOW && last3 == LOW){ | |
hold3 ++; | |
if (hold3 > 10){ | |
bankSelect(-1); | |
} | |
} | |
if (now3 == HIGH && last3 == LOW){ | |
hold3 = 0; | |
} | |
if (now4 == LOW && last4 == HIGH){ | |
startStop(); | |
} | |
if (now5 == LOW && last5 == HIGH){ | |
send2(0xB9, byte(27)); | |
} | |
if (now6 == LOW && last6 == HIGH){ | |
send2(0xB9, byte(28)); | |
} | |
last2 = now2; | |
last3 = now3; | |
last4 = now4; | |
last5 = now5; | |
last6 = now6; | |
if (startStopBit == 1){ | |
if (midiClock == 1){ | |
digitalWrite(13, HIGH); | |
} | |
if (midiClock > 23){ | |
midiClock = 0; | |
} | |
midiClock ++; | |
send2(0xB9, 0xF8); | |
delay(10); | |
delayMicroseconds(11333); | |
digitalWrite(13, LOW); | |
} | |
else{ | |
delay(50); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment