Buongiorno, come ho scritto nella presentazione mi sono avvicinato a arduino per un progetto musicale.
Ho appreso le basi per il progetto in questione, ovvero la creazione di un controller midi.
Con lo sketch che uso ora riesco tranquillamente ad usare 6 potenziometri, collegati direttamente ad Arduino Uno.
Purtroppo ho bisogno di molti più potenziomentri, almeno 60.
Ho dei multiplexer 74hc4067, nessun problema per il collegamento, ma non posso dire lo stesso per lo sketch.
So di chiedere tanto ma non ho idea da dove iniziare per impostare il multiplexer.
Anche qualche dritta sarebbe una manna dal cielo!
Il codice che uso a 6 potenziometri è questo:
int val = 0; //Our initial pot values. We need one for the first value and a second to test if there has been a change made. This needs to be done for all 3 pots.
int lastVal = 0;
int val2 = 0;
int lastVal2 = 0;
int val3 = 0;
int lastVal3 = 0;
int val4 = 0;
int lastVal4 = 0;
int val5 = 0;
int lastVal5 = 0;
int val6 = 0;
int lastVal6 = 0;
void setup()
{
Serial.begin(9600); // Set the speed of the midi port to the same as we will be using in the Hairless Midi software
}
void loop()
{
val = analogRead(0)/8; // Divide by 8 to get range of 0-127 for midi
if (val != lastVal) // If the value does not = the last value the following command is made. This is because the pot has been turned. Otherwise the pot remains the same and no midi message is output.
{
MIDImessage(176,1,val);} // 176 = CC command (channel 1 control change), 1 = Which Control, val = value read from Potentionmeter 1 NOTE THIS SAYS VAL not VA1 (lowercase of course)
lastVal = val;
val2 = analogRead(1)/8; // Divide by 8 to get range of 0-127 for midi
if (val2 != lastVal2)
{
MIDImessage(176,2,val2);} // 176 = CC command, 2 = Which Control, val = value read from Potentionmeter 2
lastVal2 = val2;
val3 = analogRead(2)/8; // Divide by 8 to get range of 0-127 for midi
if (val3 != lastVal3)
{
MIDImessage(176,3,val3);} // 176 = CC command, 3 = Which Control, val = value read from Potentionmeter 3
lastVal3 = val3;
val4 = analogRead(3)/8; // Divide by 8 to get range of 0-127 for midi
if (val4 != lastVal4)
{
MIDImessage(176,4,val4);} // 176 = CC command, 4 = Which Control, val = value read from Potentionmeter 4
lastVal4 = val4;
val5 = analogRead(4)/8; // Divide by 8 to get range of 0-127 for midi
if (val5 != lastVal5)
{
MIDImessage(176,5,val5);} // 176 = CC command, 5 = Which Control, val = value read from Potentionmeter 5
lastVal5 = val5;
val6 = analogRead(5)/8; // Divide by 8 to get range of 0-127 for midi
if (val6 != lastVal6)
{
MIDImessage(176,6,val6);} // 176 = CC command, 6 = Which Control, val = value read from Potentionmeter 6
lastVal6 = val6;
delay(10); //here we add a short delay to help prevent slight fluctuations, knocks on the pots etc. Adding this helped to prevent my pots from jumpin up or down a value when slightly touched or knocked.
}
void MIDImessage(byte command, byte data1, byte data2) //pass values out through standard Midi Command
{
Serial.write(command);
Serial.write(data1);
Serial.write(data2);
}
Grazie anticipatamente a chiunque possa aiutarmi!