Modifications

Aller à : navigation, rechercher

Controleur midi usb arduino

5 571 octets ajoutés, 16 juin 2020 à 17:40
Avec Tableau
==== Avec Tableau ====
<pre>
//version 2.1: l'intrus
 
//Fait le 9/5/2018 par Al² pour Jonas
//re-fait le 5/5/2020 par Al² pour Jonas: version visant à modifier le bug de la senssiblité des cc
//re-re-fait le 23/05/2020 par Al² pour Jonas: ajout du bouton enjaillement-contrôlé
 
// _____ A définir ____
// Nombre d'entrées analogiques:
int Ent_Analog = 16;
// nombre de boutons
int const nb = 16;
//sensibilité: 2, ça a l'air bien
int sensibilite = 2;
//max du bouton enjaillement-contrôlé
int enjCont = 100;
 
 
 
// _________ A ne pas modifier _____________
 
// déclaration des variables
 
 
 
// déclaration des variables pour les boutons
// tableau 1 |brocheBouton|note en HEX|
int bouton [16][2] = { 38, 20,
39, 21,
40, 22,
41, 23,
42, 24,
43, 25,
44, 26,
45, 27,
46, 28,
47, 29,
48, 30,
49, 31,
50, 32,
51, 33,
52, 34,
53, 35};
 
 
// tableau 2 |etat du bouton actuel | etat du bouton antérieur |
boolean EtatBouton[16][2]={ 0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0};
int i;
 
// déclaration du bouton enjaillement-contrôlé
 
int const Switch = 12;
boolean switchEtat;
 
 
// déclaration des variables pour les potentiomètres
// définition broches potentiomètres faders (de droite a gauche)
int const pot [16]= {A0,A1,A2,A3,A4,A5,A6,A7 ,A8,A9,A10,A11,A12,A13,A14,A15};
 
// attribution canal Midi
int Cc [16]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17 ,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F};
 
// valeur initiale
int potVal [16];
 
int j;
 
 
#define midiChannel (byte) 0 // canal 1
 
 
void setup() {
Serial.begin (31250); // attention vitesse de transmission MIDI = 31250, Moniteur Série = 9600
 
// initialisation des broches
for (i=0;i<nb;i++){
pinMode (bouton [i][0], INPUT_PULLUP);
}
// initialisation du switch
pinMode (Switch, INPUT_PULLUP);
// initialisation des valeur du potentiomètre
for (int i = 0; i<16 ; i++) {
potVal[i]=0;
}
}
 
void loop() {
// Les boutons
for (i=0;i<nb;i++){
EtatBouton [i][0] = digitalRead (bouton [i][0]); // lecture des boutons
// detection des changements d'état des boutons
if (!EtatBouton [i][0] && EtatBouton [i][1]) { //
sendMessage (0x90, bouton [i][1] , 127); // envoie noteON
}
if (EtatBouton [i][0] && !EtatBouton [i][1]) {
sendMessage (0x80, bouton [i][1], 127); // envoie noteOFF
}
 
EtatBouton [i][1] = EtatBouton [i][0];
}
 
// Les potentiomètres
for (int j = 0; j<Ent_Analog ; j++) {
potVal [j] = rafraichir (pot[j], potVal[j], Cc[j], j);
//delay (1);
}
}
 
int rafraichir (int const pot, int potVal, int Cc, int i){
if (potVal + sensibilite < analogRead (pot) || potVal - sensibilite > analogRead (pot)){
potVal = analogRead (pot);
int Val = potVal/8;
if (i > 7){ // version 2.1 : pour les faders uniquement (clipper à la valeur choisie quand le switch est à 1)
// 7 parce que les faders commencent à A8 (donc sont stocké dans les dernières cases du tableau
 
//vérification du bouton d'enjaillement-contrôlé
switchEtat = digitalRead(Switch);
}
else switchEtat = 0;
if (Val>enjCont && switchEtat){
sendMessage(0xB0, Cc, enjCont); //envoie valeur clippée
}
else sendMessage(0xB0, Cc, Val); //envoie valeur non-clippée
}
return potVal; // version 1: else return analogRead(pot); repare le 5/5/2020
}
 
 
 
// Fonctions communes
void sendMessage (byte cmd, byte ch, byte val){
cmd= cmd|byte (midiChannel);
Serial.write (cmd);
Serial.write (ch);
Serial.write (val);
}
 
/*
// version débuggage, penser à changer la vitesse (9600 ou 31250)
void sendMessage (int cmd, int cc, int val){
cmd= cmd|byte (midiChannel);
Serial.print("cmd : ");
Serial.print (cmd, HEX);
Serial.print(" ");
Serial.print("cc : ");
Serial.print (cc, HEX);
Serial.print(" ");
Serial.print("val : ");
Serial.print (val, DEC);
Serial.println ("");
}
*/
</pre>
====Débuggage====
Inverser le 5v et le GND en branchant les potentiomètres et faders, inverse les bornes (0-1024 ou 1024-0), ce qui a un impact sur la manière dont on se comporte le contrôleur avec les logiciels. Il faut donc faire attention de les brancher tous dans le même sens. Basiquement, "il fonctionne à l'envers".
124
modifications

Menu de navigation