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//