Bonsoir, après quelques jours je reviens vers vous afin de trouver de l'aide pour terminer mon contrôleur midi à base d'Arduino Uno...
pour rappel, il s'agit d'un contrôleur midi dédié au logiciel Universal audio LA3A, le contrôleur regroupe deux unités soit:
4 contrôles plus 1 galvanomètre par instance
le galvanometre n'a qu'une fonction ludique et simule une activité audio, en reprenant l'activité midi routé jusqu'au galva.
chaque contrôleur est assigné à un canal midi :
les 4 premiers pots et le galva associé sur le canal midi 1 (0 dans le code)
les 4 autres pots et le second galva sur le canal midi 2 (1 dans le code)
j'ai un code qui fonctionne pour le contrôleur(ci-dessous), j'ai réussi à calibrer et faire fonctionner les galvanomètres avec des codes de base, je dois rassembler les deux mais je bute à cause du multiplexage, j'ai essayé plusieurs choses sans résultat, si vous avez des pistes...elles sont les bienvenues
pour que le galvanometre bouge de manière réaliste j'ai besoin que les pots fassent varier l'intensité du signal, et non allumer /éteindre, bref....j'me gratte la tête
cdlt,
cereale
int inputMux0 = 3; //entree mux
int r0 = 0; // 4051 (s0)
int r1 = 0; // 4051 (s1)
int r2 = 0; // 4051 (s2)
int row = 0; // storeing the bin code
int i = 0; // just a count
int nbIn = 8; // nombre d'entrees par 4051
int bin[] = {000, 1, 10, 11, 100, 101, 110, 111}; // comptage pour 8 entrées
int valRow0[] = {0, 0, 0, 0, 0, 0, 0, 0}; //valeurs lues de ce tour
int valRowLast0[] = {0, 0, 0, 0, 0, 0, 0, 0}; //archive du tour précédent
char controlChannel0[] = {0, 0, 0, 0, 1, 1, 1, 1}; //channel midi
char controlNumber0[] = {7, 7, 7, 7, 7, 7, 7, 7}; //numero du parametre
void setup()
{
pinMode(2, OUTPUT); // s0
pinMode(3, OUTPUT); // s1
pinMode(4, OUTPUT); // s2
Serial.begin(31250); //liaison midi
}
void loop ()
{
for (i = 0; i <= nbIn - 1; i++) {
row = bin[i];
r0 = row & 0x01;
r1 = (row>>1) & 0x01;
r2 = (row>>2) & 0x01;
digitalWrite(2, r0);
digitalWrite(3, r1);
digitalWrite(4, r2);
delay(5);
valRow0[i] = analogRead(inputMux0) / 8;
if(valRow0[i] != valRowLast0[i]) {
midiSend(175 + controlChannel0[i], controlNumber0[i], valRow0[i]);
valRowLast0[i] = valRow0[i];
}
}
}
void midiSend(char cc_chan, char cc_num, char cc_val) {
{
Serial.print(cc_chan, BYTE);
Serial.print(cc_num, BYTE);
Serial.print(cc_val, BYTE);
}
}