Arduino mega 2560 als midi controler
Geplaatst: 20 sep 2016 01:14
Dus lang verhaal kort,
Ik heb een Arduino Mega 2560 en gebruik de digitale I/O poorten als directe contacten, (ik weet het inefficient maar dat maakte het makkelijker programeren dacht ik)
Deel van het verhaal staat hier:
viewtopic.php?f=7&t=2491
Schema is als volgt:
poort 22 tot 53 worden dus gebruikt als toetsen voor het pedaal.
Hierbij heb ik de volgende code geschreven gebaseerd op vergelijkbare projecten op het internet:
Kan niet fout gaan dacht ik, wel dus...
Wat er gebeurt is dat ondanks dat als een toets word aangeslagen de arduino via midi de juiste toets weergeeft, ondertussen alle toetsen respectievelijk in volgorde van laag naar hoog aan en uit gezet worden.
Ik heb geen idee waar het aan ligt en voor ik me suf zoek op het internet en een nieuwe code verzin hoopte ik de experts onder ons het eens te vragen. Wie weet krijgen we hier wel de goedkoopste manier uit om je pedaal/keyboard/knoppen te midificeren...
Wie kan mij helpen de code te verbeteren?
Ik heb een Arduino Mega 2560 en gebruik de digitale I/O poorten als directe contacten, (ik weet het inefficient maar dat maakte het makkelijker programeren dacht ik)
Deel van het verhaal staat hier:
viewtopic.php?f=7&t=2491
Schema is als volgt:
poort 22 tot 53 worden dus gebruikt als toetsen voor het pedaal.
Hierbij heb ik de volgende code geschreven gebaseerd op vergelijkbare projecten op het internet:
- Code:
boolean C = 0;
boolean CS = 0;
boolean D = 0;
boolean DS = 0;
boolean E = 0;
boolean F = 0;
boolean FS = 0;
boolean G = 0;
boolean GS = 0;
boolean A = 0;
boolean AS = 0;
boolean B = 0;
boolean C2 = 0;
boolean CS2 = 0;
boolean D2 = 0;
boolean DS2 = 0;
boolean E2 = 0;
boolean F2 = 0;
boolean FS2 = 0;
boolean G2 = 0;
boolean GS2 = 0;
boolean H = 0;
boolean HS = 0;
boolean B2 = 0;
boolean C3 = 0;
boolean CS3 = 0;
boolean D3 = 0;
boolean DS3 = 0;
boolean E3 = 0;
boolean F3 = 0;
boolean FS3 = 0;
boolean G3 = 0;
boolean Clast = 0;
boolean CSlast = 0;
boolean Dlast = 0;
boolean DSlast = 0;
boolean Elast = 0;
boolean Flast = 0;
boolean FSlast = 0;
boolean Glast = 0;
boolean GSlast = 0;
boolean Alast = 0;
boolean ASlast = 0;
boolean Blast = 0;
boolean C2last = 0;
boolean CS2last = 0;
boolean D2last = 0;
boolean DS2last = 0;
boolean E2last = 0;
boolean F2last = 0;
boolean FS2last = 0;
boolean G2last = 0;
boolean GS2last = 0;
boolean Hlast = 0;
boolean HSlast = 0;
boolean B2last = 0;
boolean C3last = 0;
boolean CS3last = 0;
boolean D3last = 0;
boolean DS3last = 0;
boolean E3last = 0;
boolean F3last = 0;
boolean FS3last = 0;
boolean G3last = 0;
int vol = 0;
void setup() {
Serial.begin(31250);
pinMode(22, INPUT);
pinMode(23, INPUT);
pinMode(24, INPUT);
pinMode(25, INPUT);
pinMode(26, INPUT);
pinMode(27, INPUT);
pinMode(28, INPUT);
pinMode(29, INPUT);
pinMode(30, INPUT);
pinMode(31, INPUT);
pinMode(32, INPUT);
pinMode(33, INPUT);
pinMode(34, INPUT);
pinMode(35, INPUT);
pinMode(36, INPUT);
pinMode(37, INPUT);
pinMode(38, INPUT);
pinMode(39, INPUT);
pinMode(40, INPUT);
pinMode(41, INPUT);
pinMode(42, INPUT);
pinMode(43, INPUT);
pinMode(44, INPUT);
pinMode(45, INPUT);
pinMode(46, INPUT);
pinMode(47, INPUT);
pinMode(48, INPUT);
pinMode(49, INPUT);
pinMode(50, INPUT);
pinMode(51, INPUT);
pinMode(52, INPUT);
pinMode(53, INPUT);
}
void loop() {
vol = analogRead(A5);
vol = map(vol, 0, 1023, 0, 127);
C = digitalRead(22);
CS = digitalRead(23);
D = digitalRead(24);
DS = digitalRead(25);
E = digitalRead(26);
F = digitalRead(27);
FS = digitalRead(28);
G = digitalRead(29);
GS = digitalRead(30);
A = digitalRead(31);
AS = digitalRead(32);
B = digitalRead(33);
C2 = digitalRead(34);
CS2 = digitalRead(35);
D2 = digitalRead(36);
DS2 = digitalRead(37);
E2 = digitalRead(38);
F2 = digitalRead(39);
FS2 = digitalRead(40);
G2 = digitalRead(41);
GS2 = digitalRead(42);
H = digitalRead(31);
HS = digitalRead(32);
B2 = digitalRead(45);
C3 = digitalRead(46);
CS3 = digitalRead(47);
D3 = digitalRead(48);
DS3 = digitalRead(49);
E3 = digitalRead(50);
F3 = digitalRead(51);
FS3 = digitalRead(52);
G3 = digitalRead(53);
if(C != Clast) {
if(C == 1) {
noteOn(0x90, 36, vol);
}
else {
noteOn(0x80, 36, 0x00);
noteOn(0x80, 36, 0x00);
}
}
if(CS != CSlast) {
if(CS == 1) {
noteOn(0x90, 37, vol);
}
else {
noteOn(0x80, 37, 0x00);
noteOn(0x80, 37, 0x00);
}
}
if(D != Dlast) {
if(D == 1) {
noteOn(0x90, 38, vol);
}
else {
noteOn(0x80, 38, 0x00);
noteOn(0x80, 38, 0x00);
}
}
if(DS != DSlast) {
if(DS == 1) {
noteOn(0x90, 39, vol);
}
else {
noteOn(0x80,39, 0x00);
noteOn(0x80,39, 0x00);
}
}
if(E != Elast) {
if(E == 1) {
noteOn(0x90, 40, vol);
}
else {
noteOn(0x80, 40, 0x00);
noteOn(0x80, 40, 0x00);
}
}
if(F != Flast) {
if(F == 1) {
noteOn(0x90, 41, vol);
}
else {
noteOn(0x80, 41, 0x00);
noteOn(0x80, 41, 0x00);
}
}
if(FS != FSlast) {
if(FS == 1) {
noteOn(0x90, 42, vol);
}
else {
noteOn(0x80, 42, 0x00);
noteOn(0x80, 42, 0x00);
}
}
if(G != Glast) {
if(G == 1) {
noteOn(0x90, 43, vol);
}
else {
noteOn(0x80, 43, 0x00);
noteOn(0x80, 43, 0x00);
}
}
if(GS != GSlast) {
if(GS == 1) {
noteOn(0x90, 44, vol);
}
else {
noteOn(0x80, 44, 0x00);
noteOn(0x80, 44, 0x00);
}
}
if(A != Alast) {
if(A == 1) {
noteOn(0x90, 45, vol);
}
else {
noteOn(0x80, 45, 0x00);
noteOn(0x80, 45, 0x00);
}
}
if(AS != ASlast) {
if(AS == 1) {
noteOn(0x90, 46, vol);
}
else {
noteOn(0x80, 46, 0x00);
noteOn(0x80, 46, 0x00);
}
}
if(B != Blast) {
if(B == 1) {
noteOn(0x90, 47, vol);
}
else {
noteOn(0x80, 47, 0x00);
noteOn(0x80, 47, 0x00);
}
}
if(C2 != C2last) {
if(C2 == 1) {
noteOn(0x90, 48, vol);
}
else {
noteOn(0x80, 48, 0x00);
noteOn(0x80, 48, 0x00);
}
}
if(CS2 != CSlast) {
if(CS2 == 1) {
noteOn(0x90, 49, vol);
}
else {
noteOn(0x80, 49, 0x00);
noteOn(0x80, 49, 0x00);
}
}
if(D2 != Dlast) {
if(D2 == 1) {
noteOn(0x90, 50, vol);
}
else {
noteOn(0x80, 50, 0x00);
noteOn(0x80, 50, 0x00);
}
}
if(DS2 != DSlast) {
if(DS2 == 1) {
noteOn(0x90, 51, vol);
}
else {
noteOn(0x80, 51, 0x00);
noteOn(0x80, 51, 0x00);
}
}
if(E2 != Elast) {
if(E2 == 1) {
noteOn(0x90, 52, vol);
}
else {
noteOn(0x80, 52, 0x00);
noteOn(0x80, 52, 0x00);
}
}
if(F2 != Flast) {
if(F2 == 1) {
noteOn(0x90, 53, vol);
}
else {
noteOn(0x80, 53, 0x00);
noteOn(0x80, 53, 0x00);
}
}
if(FS2 != FSlast) {
if(FS2 == 1) {
noteOn(0x90, 54, vol);
}
else {
noteOn(0x80, 54, 0x00);
noteOn(0x80, 54, 0x00);
}
}
if(G2 != Glast) {
if(G2 == 1) {
noteOn(0x90, 55, vol);
}
else {
noteOn(0x80, 55, 0x00);
noteOn(0x80, 55, 0x00);
}
}
if(GS2 != GSlast) {
if(GS2 == 1) {
noteOn(0x90, 56, vol);
}
else {
noteOn(0x80, 56, 0x00);
noteOn(0x80, 56, 0x00);
}
}
if(H != Alast) {
if(H == 1) {
noteOn(0x90, 57, vol);
}
else {
noteOn(0x80, 57, 0x00);
noteOn(0x80, 57, 0x00);
}
}
if(HS != ASlast) {
if(HS == 1) {
noteOn(0x90, 58, vol);
}
else {
noteOn(0x80, 58, 0x00);
noteOn(0x80, 58, 0x00);
}
}
if(B2 != Blast) {
if(B2 == 1) {
noteOn(0x90, 59, vol);
}
else {
noteOn(0x80, 59, 0x00);
noteOn(0x80, 59, 0x00);
}
}
if(C3 != Clast) {
if(C3 == 1) {
noteOn(0x90, 60, vol);
}
else {
noteOn(0x80, 60, 0x00);
noteOn(0x80, 60, 0x00);
}
}
if(CS3 != CSlast) {
if(CS3 == 1) {
noteOn(0x90, 61, vol);
}
else {
noteOn(0x80, 61, 0x00);
noteOn(0x80, 61, 0x00);
}
}
if(D3 != Dlast) {
if(D3 == 1) {
noteOn(0x90, 62, vol);
}
else {
noteOn(0x80, 62, 0x00);
noteOn(0x80, 62, 0x00);
}
}
if(DS3 != DSlast) {
if(DS3 == 1) {
noteOn(0x90, 63, vol);
}
else {
noteOn(0x80, 63, 0x00);
noteOn(0x80, 63, 0x00);
}
}
if(E3 != Elast) {
if(E3 == 1) {
noteOn(0x90, 64, vol);
}
else {
noteOn(0x80, 64, 0x00);
noteOn(0x80, 64, 0x00);
}
}
if(F3 != Flast) {
if(F3 == 1) {
noteOn(0x90, 65, vol);
}
else {
noteOn(0x80, 65, 0x00);
noteOn(0x80, 65, 0x00);
}
}
if(FS3 != FSlast) {
if(FS3 == 1) {
noteOn(0x90, 66, vol);
}
else {
noteOn(0x80, 66, 0x00);
noteOn(0x80, 66, 0x00);
}
}
if(G3 != Glast) {
if(G3 == 1) {
noteOn(0x90, 67, vol);
}
else {
noteOn(0x80, 67, 0x00);
noteOn(0x80, 67, 0x00);
}
}
Clast = C;
CSlast = CS;
Dlast = D;
DSlast = DS;
Elast = E;
Flast = F;
FSlast = FS;
Glast = G;
GSlast = GS;
Alast = A;
ASlast = AS;
Blast = B;
C2last = C2;
CS2last = CS2;
D2last = D2;
DS2last = DS2;
E2last = E2;
F2last = F2;
FS2last = FS2;
G2last = G2;
GS2last = GS2;
Hlast = A2;
HSlast = AS2;
B2last = B2;
C3last = C3;
CS3last = CS3;
D3last = D3;
DS3last = DS3;
E3last = E3;
F3last = F3;
FS3last = FS3;
G3last = G3;
delay(50);
}
void noteOn(byte cmd, byte data1, byte data2) {
Serial.write(cmd);
Serial.write(data1);
Serial.write(data2);
delay(10);
}
Kan niet fout gaan dacht ik, wel dus...
Wat er gebeurt is dat ondanks dat als een toets word aangeslagen de arduino via midi de juiste toets weergeeft, ondertussen alle toetsen respectievelijk in volgorde van laag naar hoog aan en uit gezet worden.
Ik heb geen idee waar het aan ligt en voor ik me suf zoek op het internet en een nieuwe code verzin hoopte ik de experts onder ons het eens te vragen. Wie weet krijgen we hier wel de goedkoopste manier uit om je pedaal/keyboard/knoppen te midificeren...
Wie kan mij helpen de code te verbeteren?