Tutorial bibliothèque PotMUX :

Dans ce tutorial nous allons voir comment utiliser la bibliothèque PotMUX avec la platine Lickogic
Pour ce tutorial vous avez besoin de :
-1x Midilickuino
-1x Arduino
            -1x à 6x  Lickogic
-Arduino software (version 1.0 or newer)
-la bibliothèque PotMUX_v1.1
-1x câble USB


Description de la bibliothèque PotMUX:


void Initialize();
// initalise la bibliothèque PotMUX

int Read (int pin);
//Renvoie la valeur 10bits du potentiomètre sélectionné
//cette fonction est équivalente à la fonction analog.Read()
//le nombre de potentiomètre va de 0 à 47

 

 
Utilisation de la bibliothèque PotMUX:


Attention: La bibliothèque PotMUX fonctionne uniquement avec Arduino UNO, Pro, Duemilanove,
Diecimila, NG et Extreme car elle utilise la manipulation des PORT.
Si vous utiliser une autre board allez voir sur le forum ici ou contacter nous et nous vous enverrons le code correspondant à votre Arduino

1-Il vous faut copier le dossier "PotMUX" qui se trouve dans la fichier RAR de la bibliothèque
PotMUX et le coller dans le dossier "libraries" de votre environnement Arduino
Il se trouve dans: X:/.../arduino-1.0.x/libraries/
Vous êtes prêts maintenant à utiliser le bibliothèque PotMUX.

2-Nous allons maintenant créer un code simple qui utilise les fonctions de la bibliothèque PotMUX
Lancer Arduino et importer notre bibliothèque
Allez dans "Croquis" puis "Importer Bibliothèque..." vous devriez voir apparaitre PotMUX, cliquez dessus.
Suivi de "void setup" et "void loop"
Dans "void setup" entrée la fonction d'initialisation de la bibliothèque: Pot.Initialize()
Votre code devrai ressembler au suivant:


#include <PotMUX.h>


void setup()
{
  Pot.Initialize();
}

void loop()
{
}


3-Amusons nous un peu avec la fonction.
Connectez Arduino avec Midilickuino et Lickogic.
La position du Jumper correspond avec le numéro des potentiomètres. Si le jumper est sur 0 les
 potentiomètres on pour numéro 0 à 7, si il est sur 1, ils ont pour numéro de 8 à15 ...

4-Nous allons créer un programme qui va nous donner sur le moniteur série d'arduino
lvaleur d'un potentiomètre et son numéro
Voici le code et ces commentaires pour que vous puissiez comprendre le fonctionnement.
Téléversez le code et ouvrez le moniteur série en appuyant sur CTRL+MAJ+M
Vous devez voir une ligne qui dit : "Le potentiometre 0 a pour valeur X".



//Ce programme nous montre le numéro du potentiomètre
//qui a changé de valeur et sa valeur

#include <PotMUX.h>


void setup()
{
  //Initialise le port série a 9600 baud
  Serial.begin(9600);
  //Initialise la bibliothèque PotMUX
  Pot.Initialize();
}

void loop()
{
  //on affiche sur le moniteur série la valeur du potentiomètre 0
    Serial.print("Le potentiometre 0 a pour valeur ");
    Serial.println(Pot.Read(0),DEC);
}




Bougez le potentiomètre et vous verrez sa valeur changer de 0 à 1023.


5-Un petit exercice:
Essayez de faire la même chose mais cette fois-ci, il faut que le moniteur série
n'affiche la valeur que si vous bougez le potentiomètre.
Il vous faudra créer deux variables de l'état du potentiomètre.
Voici le corrigé:


//Ce programme nous montre le numéro du potentiomètre
//qui a changé de valeur et sa valeur

#include <PotMUX.h>


//Variable qui va stocker la valeur du potentiomètre
int pot_value;

//variable qui va retenir la valeur de notre potentiomètre
int old_pot_value;

void setup()
{
  //Initialise le port série a 9600 baud
  Serial.begin(9600);
  //Initialise la bibliothèque PotMUX
  Pot.Initialize();
}

void loop()
{
  //On enregistre la valeur du potentiomètre
  pot_value = Pot.Read(0);
  /*Si la valeur a changé alors on affiche sur le moniteur série la nouvelle valeur
   On utilise la fonction mathématique absolu pour avoir une marge entre
   la nouvelle valeur et l'ancienne. Ceci est du à l'instabilité du ADC */
  if(abs (old_pot_value - pot_value)>3)
  {
    //on affiche sur le moniteur série la nouvelle valeur du potentiomètre 
    Serial.print("Le potentiometre 0 a pour valeur ");
    Serial.println(pot_value,DEC);
    //on oublie pas d'enregistrer la nouvelle valeur
    old_pot_value = pot_value;
  }
}

 

 

5-Maintenant que nous nous sommes familiarisés avec la fonction, essayez de scanner
 nos potentiomètres et d'en retourner la valeur sur le moniteur série.
il vous faudra utiliser l'Array et une fonction "for".
voici le code:


//Ce programme nous montre le numéro du potentiomètre
//qui a changé de valeur et sa valeur

#include <PotMUX.h>

//Definir le nombre de potentiomètre (8 dans mon cas mais vouspouvez en mettre jusqu'à 48)
#define NBR_POT 8


//Variable qui va stocker la valeur du potentiomètre
int pot_value[NBR_POT]={
};

//variable qui va retenir la valeur de notre potentiomètre
int old_pot_value[NBR_POT]={
};

void setup()
{
  //Initialise le port série a 9600 baud
  Serial.begin(9600);
  //Initialise la bibliothèque PotMUX
  Pot.Initialize();
}

void loop()
{
  //loop autant de fois que de potentiomètre
  for(int i=0;i<NBR_POT;i++)
  {
    //On enregistre les valeurs des potentiomètres
    pot_value[i] = Pot.Read(i);
    /*Si la valeur a changé alors on affiche sur le moniteur série la nouvelle valeur
     On utilise la fonction mathématique absolu pour avoir une marge entre
     la nouvelle valeur et l'ancienne. Ceci est du à l'instabilité du ADC */
    if(abs (old_pot_value[i] - pot_value[i])>3)
    {
      //on affiche sur le moniteur série la nouvelle valeur du potentiomètre 
      Serial.print("Le potentiometre ");
      Serial.print(i,DEC);
      Serial.print(" a pour valeur ");
      Serial.println(pot_value[i],DEC);
      //on oublie pas d'enregistrer la nouvelle valeur
      old_pot_value[i] = pot_value[i];
    }
  }
}



6-Il ne nous reste plus qu' a créé une fonction pour envoyer des messages CC en MIDI.
Convertir notre valeur de 10bits en 7bits (car la valeur d'un CC n'excède pas 7 bits) et nous
sommes prêt à contrôler ce que l'on veut avec nos potentiomètres
Voici le code final:



 
//Ce programme nous montre le numéro du potentiomètre
//qui a changé de valeur et sa valeur

#include <PotMUX.h>

//Definir le nombre de potentiomètre (8 dans mon cas mais vouspouvez en mettre jusqu'à 48)
#define NBR_POT 8

//Definis le type de communication 0=9600, 1=31250, 2=115200
#define SERIAL 2


//Variable qui va stocker la valeur du potentiomètre
int pot_value[NBR_POT]={
};

//variable qui va retenir la valeur de notre potentiomètre
int old_pot_value[NBR_POT]={
};

//Fonction qui envoie un message de CC sur le canal MIDI 1
void Send_CC(byte num_CC, byte value)
{
  Serial.write (0xB0);//Message "control change" sur canal MIDI 1
  Serial.write (num_CC);
  Serial.write (value);
}

void setup()
{
  //Choix de la vitesse de communication du port série 
  switch (SERIAL){
  case 0:
    Serial.begin(9600);//Communication serie pour le debuggage
    break;
  case 1:
    Serial.begin(31250);//communication MIDI
    break;
  case 2:
    Serial.begin(115200);//communication USB
    break;
  }
  //Initialise la bibliothèque PotMUX
  Pot.Initialize();
}

void loop()
{
  //loop autant de fois que de potentiomètre
  for(int i=0;i<NBR_POT;i++)
  {
    //On enregistre les valeurs des potentiomètres
    pot_value[i] = Pot.Read(i);
    /*Si la valeur a changé alors on affiche sur le moniteur série la nouvelle valeur
     On utilise la fonction mathématique absolu pour avoir une marge entre
     la nouvelle valeur et l'ancienne. Ceci est du à l'instabilité du ADC */
    if(abs (old_pot_value[i] - pot_value[i])>3)
    {
      //on envoi en MIDI la valeur du potentiomètre converti en 7bits ainsi que son numéro 
      Send_CC(i,pot_value[i]>>3);
      //on oublie pas d'enregistrer la nouvelle valeur
      old_pot_value[i] = pot_value[i];
    }
  }
}




Nous voila à la fin de ce tutoriel, amusez vous bien avec tout vos boutons ;).