arduino midi controleur DIY

Ablickton est un contrôleur MIDI pour Ableton Live (ou tout autre tracker fonctionnant avec la norme MIDI)

Charactéristique:

  • 64 boutons dédiés au control des fonctions de votre tracker ( ici 8 boutons MUTE et 56 boutons CLIP)
  • 16 potentiomètres pour contrôler les paramètres de votre tracker ( ici 8 potentiomètres VOLUME et 8 potentiomètres FX)

 

Matériel:

Pour construire ce contrôleur vous avez besoin de:

 


Tout d'abord, il vous faut télécharger et installer le logiciel Arduino (si ce n'est pas déjà fait ;) )

Ensuite téléchargez le fichier RAR "Ablickton v1.0" et décompresser le sur votre bureau. Il contient tous les fichiers nécessaires à la programmation de votre Arduino.Une fois décompressé, vous ouvrez le dossier "Ablickton v1.0" , vous arrivez sur le programme avec un dossier "libraries". Copier tout ce qui se trouve dans le dossier "libraries" dans X:/.../arduino-1.0.x/libraries/. Il vous faut copier ensuite le fichier "wiring_shift.c" qui se trouve dans le dossier de la bibliothèque SRIO et remplacer l'ancien fichier dans votre environnement Arduino.Il se trouve dans: X:/.../arduino-1.0.x/hardware/arduino/cores/arduino/. Ce fichier a été modifié afin d'optimiser la vitesse de communication entre Arduino et Dilicktal. Ensuite ouvrez le fichier "Arduino.h" qui se trouve dans  X:/.../arduino-1.0.x/hardware/arduino/cores/arduino/ Allez à la ligne 111 et remplacez les lignes 111 par "void shiftOut(uint8_t val);"  Et la ligne 112 par "uint8_t shiftIn();"


Pour le montage vous devez connecter les boards Dilicktal et Lickogic dans cet ordre la. N'oubliez pas de bien positionner le Jumper sur les platines Lickogic sur les positions 0 pour la première platine et 1 sur la deuxième.


Numéro des contrôleurs et fonctions des boutons:
Chaque bouton envoie un message de Control Change MIDI défini dans le programme qui va de 0 à 63. Le numéro du bouton correspond au numéro du contrôleur. Il ya deux options possible de type de boutons: Toggle (première pression => ON, envoi CC avec une valeur de 127, deuxième pression => OFF, envoi CC avec une valeur de 0) ou Momentary (appuyé => envoi CC avec une valeur de 127, relaché => envoi CC avec une valeur de 0). Dans la variable "button_toggle_Pin[]" vous pouvez changer le numéro des boutons qui fonctionneront en Toggle Mode. Ainsi que dans la variable "button_momentary[][]" vous pouvez changer la valeur des boutons qui seront en Momentary Mode. Vous remarquerez que cette variable est un double array afin que les boutons soit organiser pour controler les clips dans Ableton.

 
//Pin number of the toggle button
byte button_toggle_Pin[]={
  52,53,54,55,60,61,62,63 };

//Array of the momentary button pin organize to match with Ableton clip configuration
uint8_t button_momentary[8][7]={
  {
    0,4,16,20,32,36,48            }
  ,
  {
    1,5,17,21,33,37,49            }
  ,
  {
    2,6,18,22,34,38,50            }
  ,
  {
    3,7,19,23,35,39,51            }
  ,
  {
    8,12,24,28,40,44,56            }
  ,
  {
    9,13,25,29,41,45,57            }
  ,
  {
    10,14,26,30,42,46,58            }
  ,
  {
    11,15,27,31,43,47,59            }
};

 

Les potentiomètres envoient aussi un message de Control Change d'une valeur de 7bits (0 à 127). Le numéro du contrôleur correspond  au numéro du potentiomètre plus la valeur 64 pour ne pas interférer avec les boutons.

  for (byte i=0; i<NUMPOT; i++){
    pot_Value[i] = Pot.Read(i)>>3;//convert 10bits to 7bits
    if (abs (pot_Value[i] - old_Pot_Value[i])>1){//value pot changed? 
      int data = map(pot_Value[i],3,123,0,127);// map to right midi value 0,127 
      data=max(data,0);  
      data = constrain(data,0,127);
      Send_CC (i+64,data); 
      old_Pot_Value[i] = pot_Value[i];
    }
  }

 


Configuration du programme:
Vous pouvez changer les paramètres suivant dans le programme. Si vous ajoutez d'autres Lickogic à votre projet n'oubliez pas de bien configurer le jumper de chaque platine

 
//Number of connected potentiometers
#define NUMPOT 16
//communication mode 0=serial  1=MIDI  2=USB
#define COMMUNICATION_MODE 2
//Midi channel
#define MIDI_CHANNEL 1