Modifications

Aller à : navigation, rechercher

Controleur midi usb arduino

2 811 octets ajoutés, 20 juin 2020 à 11:00
Programmation
On peut générer 1024 informations différentes avec les entrées analogiques de l'Arduino, de 0 à 1023.<br/>
On peut générer 2 informations différentes avec les entré numérique de l’Arduino, soit 0 soit 1, on peut aussi parler de l'état haut ("HIGHT" en anglais), et de l'état bas ("LOW" en anglais).<br/>
[[file:SansTableau.png|700px]]
<pre>
<syntaxhighlight lang="C++" line=//version 2.1: l'line'>intrus (sans tableau)
//Fait le 9/5/2018 par Al²//re-fait le 5/5/2020 par Al²: version visant à modifier le bug de la sensibilité des cc//re-re-fait le 23/05/2020 par Al² pour Jonas: ajout du bouton enjaillement-contrôlé // _____ A définir ____ //sensibilité: 2, ça a l'air bienint sensibilite = 2;   // _________ A ne pas modifier _____________ // déclaration des variables    // déclaration des variables pour les boutons int digitalInBouton = 2;noteBouton = 20; boolean EtatBouton = 0;int i;    // déclaration des variables pour les potentiomètres int entrePot const pot = A0; // attribution Control change Midi en hexadecimalint entrebou Cc =0x10; // valeur initialeint potVal; int j;  #define midiChannel (byte) 0 // canal 1  void setup() { Serial.begin (31250); // attention vitesse de transmission MIDI = 231250, Moniteur Série = 9600  // initialisation des broches pinMode (digitalInBouton, INPUT_PULLUP); // initialisation des valeur du potentiomètre  potVal=0;
void setup(){
serial.begin(31250); //9600 pour le retour dans l'ide et 31250 pour le controleur midi
pinMode(entrebou, INPUT_PULLUP);
}
void loop(){ // Le bouton EtatBouton = digitalRead (digitalInBouton); // 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) /syntaxhighlight/ 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 communesvoid 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>
int const pot [16]= {A0,A1,A2,A3,A4,A5,A6,A7 ,A8,A9,A10,A11,A12,A13,A14,A15};
// attribution canal control change Midi
int Cc [16]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17 ,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F};
124
modifications

Menu de navigation