int presetSwitch[] = {17,16,15,14}; // presets 1 to 4 const int rangeSwitch = 18; // add or disminish +4 (range) const int patchLed[] = {2,3,4,5}; //led per patch const int bankLed = 12; // led for bank on/off int range = 0; int programChangeValue = 0; // if you want to begin from preset 1 int dlay = 260; // adjust this to taste /******************************************************/ void setup() { for(int i=0; i<4; i++) { pinMode(presetSwitch[i], INPUT_PULLUP); pinMode(patchLed[i], OUTPUT); digitalWrite(patchLed[i], LOW); } pinMode(bankLed, OUTPUT); digitalWrite(bankLed, LOW); pinMode(rangeSwitch, INPUT_PULLUP); //Serial.begin(9600); Serial.begin(31250); /* for midi communication - pin 1 TX */ } /*********************************************************/ void midiProg(byte pcNum) { Serial.write(0xC0); //midi program change status Serial.write(pcNum); } /*********************************************************/ void rangeValue() //select presets 1 to 4 or 5 to 8 { if (digitalRead(rangeSwitch)!= HIGH) { range = range +4; // add 4 digitalWrite(bankLed, HIGH); delay(dlay); if(range >4) // add as many ranges you like (multiples of four) { range = 0; // minus 4 digitalWrite(bankLed, LOW); } //Serial.print("range = "); //Serial.println(range); } } /*********************************************************/ void clearAllLeds(int except) { for(int j=0; j<4; j++) { digitalWrite(patchLed[j], LOW); } digitalWrite(patchLed[except], HIGH); } /*********************************************************/ void loop() { rangeValue(); for(int i=0; i<4; i++) { if(digitalRead(presetSwitch[i])!= HIGH) { programChangeValue = i + range; //Serial.println(programChangeValue); midiProg(programChangeValue); clearAllLeds(i); delay(dlay); } } }