The buttonstates LOW is only for the note switches 2 till 10 and A0 till A3
I have changed the code into this. Hopefully its working now. There were some dumb mistakes in the last one but im learning:)
I did not change the constrain lines because it was like that in the original code, to change octave and that works.
char notes[13] = {10, 9, 8, 7, 6, 5, 4, 3, 2, A0, A1, A2, A3};
boolean noteOn[13] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
boolean noteLast[13] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
char noteCount = 13;
char changePins[3] = {12, 13, 11};
char octaveChanges[3] = {12, -12, 0};
char singleChanges[3] = {1, -1, 0};
boolean changeButton[3] = {0, 0, 0};
boolean changeButtonLast[3] = {0, 0, 0};
char channelPins[2] = {A4, A5};
char channelchange[2] = {-1, 1};
boolean changechannel[2] = {0, 0};
boolean changechannellast[2] = {0, 0};
int keysBase = 0x24;
int keysLast = keysBase;
int NoteAanBase = 0x90;
int NoteUitBase = 0x80;
int NoteAanLast = NoteAanBase;
int NoteUitLast = NoteUitBase;
int changechannelaan(int a, int b){
NoteAanLast = a + b;
return(NoteAanLast);
}
int changechanneluit(int a, int b){
NoteUitLast = a + b;
return(NoteUitLast);
}
int changekeys(int a, int b){
keysLast = a + b;
return(keysLast);
}
void setup(){
Serial.begin(9600);
}
int midi(int midiStatus, int midiData1, int midiData2){
Serial.write(midiStatus);
Serial.write(midiData1);
Serial.write(midiData2);
}
void loop(){
constrain(keysLast, 0x18, 0x60);
for(int i = 0; i < 3; i++){
changeButtonLast[i] = changeButton[i];
changeButton[i] = digitalRead(changePins[i]);
if(changeButton[2] && changeButton[i] == HIGH && changeButton[i] != changeButtonLast[i]){
changekeys(singleChanges[i], keysLast);
}
if(changeButton[0] && changeButton[1] == HIGH){
keysLast = keysBase;
}
if(changeButton[i] == HIGH && changeButtonLast[i] != changeButton[i] && changeButton[2] == LOW){
changekeys(octaveChanges[i], keysLast);
}
}
constrain(NoteAanLast, 0x90, 0x9F);
constrain(NoteUitLast, 0x80, 0x8F);
for(int p = 0; p < 2; p++){
changechannellast[p] = changechannel[p];
changechannel[p] = digitalRead(channelPins[p]);
if(changechannel[1] == HIGH && changechannel[p] != changechannellast[p]){
changechannelaan(channelchange[p], NoteAanLast);
changechanneluit(channelchange[p], NoteUitLast);
}
if(changechannel[0] && changechannel[1] == HIGH){
NoteAanLast = NoteAanBase;
NoteUitLast = NoteUitBase;
}
if(changechannel[0] == HIGH && changechannel[p] != changechannellast[p]){
changechannelaan(channelchange[p], NoteAanLast);
changechanneluit(channelchange[p], NoteUitLast);
}
}
for(char n = 0; n < noteCount; n++){
noteOn[n] = digitalRead(notes[n]);
if(noteOn[n] == LOW && noteLast[n] != noteOn[n]){
midi(NoteAanLast, keysLast + n, 0x7F);
noteLast[n] = noteOn[n];
}
if(noteLast[n] != noteOn[n]){
midi(NoteUitLast, keysLast + n, 0x7F);
noteLast[n] = noteOn[n];
}
}
}