Modifications

Aller à : navigation, rechercher

Controleur midi usb arduino

2 357 octets supprimés, 5 février 2021 à 19:46
aucun résumé de modification
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/>
<br/>
Nous avons fait le choix de ne pas utiliser de blibliotheque midi pour l'arduino, pour deux raison:<br/>
Le fait d'écrire toute les fonction nous a permis comprendre plus profondément se que nous faisions.<br/>
Pas de rajout de bibliothèque veux aussi dire, pas de problème d'incompatibilité si on souhaite rajouté d'autre fonctionnalité qui nécessiterais elles, l’ajout d'une bibliothèque.<br/>
==== Sans Tableau ====
Pour simplifier la compréhension du programme, nous allons d'abord expliquer une version avec un seul potentiomètre et un seul bouton, ce qui signifie que nous n'aurons pas de tableau d'entrée donc pas de boucle de lecture pour ces fameux tableaux.<br/>
Dans ce cas-là, le schéma de câblage ressemble à ça:<br/>
[[file:SansTableau.png|700px]]
<pre>
//version 2.1: l'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 bien
int 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 const pot = A0;
 
// attribution Control change Midi en hexadecimal
int Cc =0x10;
 
// valeur initiale
int potVal;
 
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
pinMode (digitalInBouton, INPUT_PULLUP);
// initialisation des valeur du potentiomètre
 
potVal=0;
 
}
 
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)
// 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>
==== Avec Tableau Le programme ====En plus dans fonction classique que l'on pourrais attendre d'un contrôleur midi classique, nous avons rajouter un switch, qui permet de choisir si on veux que les signaux des faders soit au maximum a 100 ou a 127, c'est notre pote jonas pour qui nous avons fait se controler qui nous l'a demandé. Il s'en sert pour évité de faire saturer le son commander par les faders. C'est une sorte d'assurance pour éviter de faire saturer le son quand, sa motricité lui ai momentanément empruntée par la frénésie de la fête électronique.<br/>Quoi qu'il en soit si vous ne brancher rien sur l'entrée numerique 12, votre valeur maximale atteindra par default 127. <br/>
[[file:MegaFinale.png|650px]] <br/>
Dans notre programme nous avons rajouté un fonctionement qui bloque a
'''Attention''', nous avons linux sur nos ordinateur, et nous n'allons pas expliquer la procédure avec Windows ou mac.<br/>
Il nous semble que c'est possible sous windows avec le logiciel "flip" d'atmel que vous trouverez sur leur site.<br/>
Sur mac, débrouillez vous, il est nous semble néanmoins que dfu-programmer exist éxiste aussi sur mac, essayer d'adapter les commande linux, et bonne chance!!<br/>
====dfu-programmer ====
745
modifications

Menu de navigation