Modifications

Aller à : navigation, rechercher

Controleur midi usb arduino

1 786 octets supprimés, 4 août 2020 à 22:03
aucun résumé de modification
|ingrédients=arduino uno ou arduino mega, boutons poussoir, breadboard (au début), PCB prototype (si vous voulez remplacer la breadboard), des fils, faders (potentiomètres linéaires)(optionnel), potentiomètres (optionnel),
|machines=fer à souder (si vous ne gardez pas la breadboard), ordinateur (linux recommandé), programmeur AVR usb-isp (dans de rares cas),
}}
=== Contexte ===
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
 
 
// _____ 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 le bouton
int digitalInBouton = 2;
noteBouton = 20;
 
boolean EtatBoutonAct = 0;
boolean EtatBoutonPrec = 0;
int i;
 
 
 
// déclaration des variables pour le potentiomètre
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
EtatBoutonAct = digitalRead (digitalInBouton); // lecture du bouton
//Détection des changements d'état des boutons
//De cette manière on évite de "spamer" les messages midi
//On envoie un message MIDI, uniquement lors du changement d'état
 
if (!EtatBoutonAct && EtatBoutonAnt) {
sendMessage (0x90, noteBouton, 127); // envoie noteON
}
if (EtatBoutonAct && !EtatBoutonAnt) {
sendMessage (0x80, noteBouton, 127); // envoie noteOFF
}
 
EtatBoutonAnt = EtatBoutonAct;
}
 
// Le potentiomètre
potVal = rafraichir (pot , potVal, Cc);
//delay (1);
}
 
int rafraichir (int const pot, int potVal, int Cc){
if (potVal + sensibilite < analogRead (pot) || potVal - sensibilite > analogRead (pot)){
potVal = analogRead (pot);
int Val = potVal/8;
 
sendMessage(0xB0, Cc, Val); //envoie valeur non-clippée
}
return potVal;
}
 
 
 
// 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