int controlChange = 176; // Control-Change MIDI canale 1
//multiplexer analogico (A0-A1)
int potenziometro[16];
int controller[16];
int controllerAlt[16];
int i = 0;
//potenziometro esterno (A2)
int controllerNumero = 36;
int controller2 = 0;
int controllerAlt2 = 0;
int poti = 0;
//pin digitali Multiplexer (5-6-7)
int bit1 = 0;
int bit2 = 0;
int bit3 = 0;
//multiplexer pulsanti (3-4)
int pulsante[16];
int a = 0;
//sensore prossimita
int triggerPin = 8;
int echoPin = 9;
void setup() {
//Select-Pins 4051s potenziometri e pulsanti
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
//
pinMode (pulsante, INPUT);
//Sensore prossimita
pinMode(8, OUTPUT); //Trigger
pinMode(9, INPUT); //Echo
Serial.begin(9600);
}
void loop() {
//potenziometro esterno
poti = analogRead(A2);
controller2 = map(poti,0,1023,0,127);
if (controller2 != controllerAlt2) {
Serial.write(controlChange);
Serial.write(controllerNumero);
Serial.write(controller2);
controllerAlt2 = controller2;
}
// multiplexer analogico A0 A1
for (i = 0; i <= 7; i++) {
bit1 = bitRead(i,0);
bit2 = bitRead(i,1);
bit3 = bitRead(i,2);
digitalWrite(4, bit1);
digitalWrite(5, bit2);
digitalWrite(6, bit3);
multiPot(i,A0);
multiPot(i+8,A1);
}
}
void multiPot(int contatore,int analogPin) {
potenziometro[contatore] = 0.2 * potenziometro[contatore] + 0.8 * analogRead(analogPin);
controller[contatore] = map (potenziometro[contatore],0,1023,0,127);
if (controller[contatore] != controllerAlt[contatore]); {
sendeMIDI(controlChange, (20+contatore), controller[contatore]);
controllerAlt[contatore] = controller[contatore];
}
}
void sendeMIDI(int statusByte,int dataByte1, int dataByte2) {
Serial.write(statusByte);
Serial.write(dataByte1);
Serial.write(dataByte2);
}
for (a = 0; a <= 31; a++) {
bit1 = bitRead(a,0);
bit2 = bitRead(a,1);
bit3 = bitRead(a,2);
digitalWrite(4, bit1);
digitalWrite(5, bit2);
digitalWrite(6, bit3);
if (a >= 16 ) {
pulsante[a] = digitalRead (2);
multiPul(a,2);
multiPul(a+24,3);
}
}
void multiPul(int contatore,int digitalPin) {
pulsante[contatore] = 0.2 * pulsante[contatore] + 0.8 * digitalRead(digitalPin);
controller[contatore] = map (pulsante[contatore],0,1023,0,127);
sendeMIDI(controlChange, (40+contatore), controller[contatore]);
controllerAlt[contatore] = controller[contatore];
}
void sendeMIDI(int statusByte,int dataByte1, int dataByte2) {
Serial.write(statusByte);
Serial.write(dataByte1);
Serial.write(dataByte2);
}
forse ho fatto una scemata..
in poche parole ho usato 4 multiplexer 4051 con gli stessi 3 pin digitali (fin qui nella norma)
il farro è che 2 multiplexer li ho usati per dei pulsanti e ora il codice non riesco a farlo andare in questa parte qui
for (a = 0; a <= 31; a++) {
bit1 = bitRead(a,0);
bit2 = bitRead(a,1);
bit3 = bitRead(a,2);
digitalWrite(4, bit1);
digitalWrite(5, bit2);
digitalWrite(6, bit3);
if (a >= 16 ) {
pulsante[a] = digitalRead (2);
multiPul(a,2);
multiPul(a+24,3);
}
}
void multiPul(int contatore,int digitalPin) {
pulsante[contatore] = 0.2 * pulsante[contatore] + 0.8 * digitalRead(digitalPin);
controller[contatore] = map (pulsante[contatore],0,1023,0,127);
sendeMIDI(controlChange, (40+contatore), controller[contatore]);
controllerAlt[contatore] = controller[contatore];
}
senza questa parte funziona tutto.. mi potreste aiutare?
son sicuro che questo codice servirà anche ad altri utenti "italiani" che come me non ne sanno quasi niente, anzi diciamo pure niente!!