Problema con MIDI Program change Up e down con la pressione di due switch

Salve a tutti. Sto ultimando la mia pedaliera Midi che è composta da sei bottoni di cui 4 che mandano comandi control change toggle, e gli ultimi due fanno up and down dei program change. Poi in aggiunta c'è un bottone di tipo interruttore che se ON trasforma i 4 bottoni che sono control CHANGE toggle di base, in program Change statici (PC 00, PC 01, PC 02 e così via). E infine una levettina che modifica i CC toggle in CC con un numero fisso e un valore fisso che mi permettono di utilizzare alcune impostazioni del mio modeler.

Ora, Per quanto riguarda l up and down Dei program change per fare in modo che due bottoni possano essere liberati e utilizzati per aggiungerci altri 2 CC toggle , vorrei assegnarli in altro modo, ossia che quando premo in contemporanea i bottoni 1 e 2 il PC facesse UP, e quando premo 2 e 3 il program Change facesse down. Ho provato ad inserire nella condizione If della sezione dello sketch che si occupa proprio di gestire l'up e il down dei program, button e button 2 come HIGH (per l'up) , e button2 e button 3 HIGH (per il down), ma purtroppo richiama Sì i program change up e down ma in contemporanea ovviamente mi parte anche il comando dei Control Change che sono assegnati a quei bottoni. come potrei fare quindi per far sì che premendo il bottone 1 e 2 mi facesse l'app dei program Change e premendo il bottone 2 e 3 mi facesse il down sempre di questi program change? di seguito metto lo sketch intero grazie mille!

#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE();

byte patchNum = 0;
int Btoggle = 1;
int progNo = 0;
int upLastTime, downLastTime, upNow, downNow;



#define c 4
#define b 3
#define a 2
#define g 5
#define e 6
#define d 7
#define f 8
#define ledMode 16
#define ledModeCC 18

#define button 9
#define button2 10
#define button3 11
#define button4 12
#define programChangeUp 13
#define programChangeDown 14
#define buttonMode 15
#define buttonModeCC 17

////////////////STATO BOTTONI e TOGGLE STATE//////////////////
bool buttonState = 0;
bool button2State = 0;
bool button3State = 0;
bool button4State = 0;
bool buttonModeState = 0;
bool buttonModeCCState = 0;
bool programChangeUpState = 0;
bool programChangeDownState = 0;
bool toggleState = 0;
bool toggle2State = 0;
bool toggle3State = 0;
bool toggle4State = 0;


//////////////ULTIMO STATO BOTTONI///////////////////
bool lastButtonState = 0;
bool lastButton2State = 0;
bool lastButton3State = 0;
bool lastButton4State = 0;

void setup() {
  MIDI.begin(MIDI_CHANNEL_OFF);
  
  pinMode(button, INPUT);
  pinMode(button2, INPUT);
  pinMode (button3, INPUT);
  pinMode (button4, INPUT);
  pinMode (buttonMode, INPUT);
   pinMode (buttonModeCC, INPUT);

  pinMode(c, OUTPUT); 
  pinMode(b, OUTPUT);
  pinMode(a, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT); 
  pinMode(g, OUTPUT);
  pinMode(f, OUTPUT);
 pinMode (ledMode, OUTPUT);
 pinMode (ledModeCC, OUTPUT);
 
pinMode (programChangeUp, INPUT);
 pinMode (programChangeDown, INPUT);

 digitalWrite(programChangeUp, HIGH); // enable pull up
 upLastTime = digitalRead(programChangeUp);
 
 digitalWrite(programChangeDown, HIGH); // enable pull up
 downLastTime = digitalRead(programChangeDown) ;
}

void loop() {
   
buttonModeState = digitalRead(buttonMode);
buttonModeCCState = digitalRead (buttonModeCC);
buttonState = digitalRead(button);
button2State = digitalRead(button2);
button3State = digitalRead(button3);
button4State = digitalRead(button4);
programChangeUpState = digitalRead(programChangeUp);
programChangeDownState = digitalRead(programChangeDown);


///////////////////////////UP e DOWN PROGRAM CHANGE//////////////////////////////////////////////

upNow = digitalRead(programChangeUp);
downNow = digitalRead(programChangeDown);
if (upNow == HIGH && upLastTime == LOW) {
    progNo++; // increment program change
    if(progNo > 127) progNo = 127; // stop it going too high
    MIDI.sendProgramChange(byte(progNo), 1);
    delay(200);
   
 }

if (downNow == HIGH && downLastTime == LOW) {
    progNo--; // decrement program change
    if(progNo < 0) progNo = 0; // stop it going too low
    MIDI.sendProgramChange(byte(progNo), 1);
    delay(200); // bit of debounce delay
 }

  upLastTime= upNow;
  downLastTime = downNow;






//////////////CONTROL CHANGE NORMALE CON CC69 ////////////////////////////////////////////////////

if ((digitalRead(button) == HIGH) && (buttonModeCCState == HIGH) && (buttonModeState == LOW)) {

MIDI.sendControlChange (69, 8, 1);
delay(200);
  }

if ((digitalRead(button2) == HIGH) && (buttonModeCCState == HIGH) && (buttonModeState == LOW)) {

MIDI.sendControlChange (69, 9, 1);
delay(200);
  }

  if ((digitalRead(button3) == HIGH) && (buttonModeCCState == HIGH) && (buttonModeState == LOW)) {

MIDI.sendControlChange (69, 0, 1);
delay(200);
  }

   if ((digitalRead(button4) == HIGH) && (buttonModeCCState == HIGH) && (buttonModeState == LOW)) {

MIDI.sendControlChange (69, 1, 1);
delay(200);
  }


//////// TOGGLE CC SETTINGS ///////////////////////////////////////////////////////////////////////////
if (buttonState != lastButtonState && buttonState == 1 && toggleState == 0 && (buttonModeState == LOW) && (buttonModeCCState == LOW)) {
 

            MIDI.sendControlChange(80, 127, 1);
            toggleState = 1;

delay(200);
 }

           else if (buttonState != lastButtonState && buttonState == 1 && toggleState == 1 && (buttonModeState == LOW) && (buttonModeCCState == LOW)) {
            MIDI.sendControlChange(80, 0, 1);
           toggleState = 0;
           delay(200);
  }
lastButtonState = buttonState;


if (button2State != lastButton2State && button2State == 1 && toggle2State == 0 && (buttonModeState == LOW) && (buttonModeCCState == LOW)) {
 

            MIDI.sendControlChange(81, 127, 1);
            toggle2State = 1;

delay(200);
 }

           else if (button2State != lastButton2State && button2State == 1 && toggle2State == 1 && (buttonModeState == LOW) && (buttonModeCCState == LOW)) {
            MIDI.sendControlChange(81, 0, 1);
           toggle2State = 0;
           delay(200);
  }
lastButton2State = button2State;


if (button3State != lastButton3State && button3State == 1 && toggle3State == 0 && (buttonModeState == LOW) && (buttonModeCCState == LOW)) {
 

            MIDI.sendControlChange(82, 127, 1);
            toggle3State = 1;

delay(200);
 }
           else if (button3State != lastButton3State && button3State == 1 && toggle3State == 1 && (buttonModeState == LOW) && (buttonModeCCState == LOW)) {
            MIDI.sendControlChange(82, 0, 1);
           toggle3State = 0;
   delay(200);        
  }
lastButton3State = button3State;

if (button4State != lastButton4State && button4State == 1 && toggle4State == 0 && (buttonModeState == LOW) && (buttonModeCCState == LOW)) {
             MIDI.sendControlChange(83, 127, 1);
             toggle4State = 1;
             delay(200);
 }

           else if (button4State != lastButton4State && button4State == 1 && toggle4State == 1 && (buttonModeState == LOW) && (buttonModeCCState == LOW)) {
            MIDI.sendControlChange(83, 0, 1);
           toggle4State = 0;
           delay(200);
  }
lastButton4State = button4State;



//////////////////////PROGRAM CHANGE SETTINGS////////////////////////////////////////////////////////////////////////////////////////////////////////

if ((digitalRead(button) == HIGH) && (buttonModeState == HIGH)) {

patchNum = 0;
MIDI.sendProgramChange (patchNum, 1);
delay(200);
  }
  
  if ((digitalRead(button2) == HIGH) && (buttonModeState == HIGH)) {

patchNum = 1;
MIDI.sendProgramChange (patchNum, 1);
delay(200);
  }
  if ((digitalRead(button3) == HIGH) && (buttonModeState == HIGH)) {

patchNum = 2;
MIDI.sendProgramChange (patchNum, 1);
delay(200);
  }

   if ((digitalRead(button4) == HIGH) && (buttonModeState == HIGH)) {

patchNum = 3;
MIDI.sendProgramChange (patchNum, 1);
delay(200);
  }

/////////////////////LED SETTINGS //////////////////////////////////////////////////////////////////////////

///Non inserita per non eccedere nei caratteri ma non è questo il problema, infatti funziona alla grande//

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.