Skip to content

Instantly share code, notes, and snippets.

@EvanBurnette
Created December 4, 2018 17:30
Show Gist options
  • Save EvanBurnette/7c9aa9fbd500c2fc14ddb1219aeeb60f to your computer and use it in GitHub Desktop.
Save EvanBurnette/7c9aa9fbd500c2fc14ddb1219aeeb60f to your computer and use it in GitHub Desktop.
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