Probleme code Midi

Bonjour,
je me fabrique un petit midi controller et j'utilise hairless-midiserial pour convertir le signal.
j'ai reussit a faire funcionner 8 des 10 potenciometter a partir du 9ème hairless m'envoi un message d'erreur.
Merci pour votre aide :slight_smile:

// TRAME MIDI (cccc = canal):

// |===============MESSAGE=================|============DONNEE1============|=========DONNEE2==========|
// | 1000 cccc = note off => 128(10) | 0xxx xxxx: hauteur note | 0xxx xxxx: vélocité |
// | 1001 cccc = note on => 129(10) | 0xxx xxxx: hauteur note | 0xxx xxxx: vélocité |
// | 1110 cccc = pitch bend => 224(10) | 0000 0000: code | 0xxx xxxx: vitesse |
// | 1011 cccc = control change => 176(10) | 0xxx xxxx: numero | 0xxx xxxx: valeur |
// --------------------------------------------------------------------------------------------------
//========================
//Analog pin ZERO
int valuePinZero = 0;
int valuePinZero2 = 0;

//Analog pin ONE
int valuePinOne = 0;
int valuePinOne2 = 0;

//Analog pin TWO
int valuePinTwo = 0;
int valuePinTwo2 = 0;

//Analog pin THREE
int valuePinTHREE = 0;
int valuePinTHREE2 = 0;

//Analog pin FOUR
int valuePinFOUR = 0;
int valuePinFOUR2 = 0;

//Analog pin FIVE
int valuePinFIVE = 0;
int valuePinFIVE2 = 0;

//Analog pin SIX
int valuePinSIX = 0;
int valuePinSIX2 = 0;

//Analog pin SEVEN
int valuePinSEVEN = 0;
int valuePinSEVEN2 = 0;

//Analog pin EIGHT
int valuePinEIGHT = 0;
int valuePinEIGHT2 = 0;

//Analog pin NINE
int valuePinNINE = 0;
int valuePinNINE2 = 0;
void setup()
{
  Serial.begin(57600); // vitesse de communication
}

void loop()
{
  //controleur ZERO
  //----------------
  valuePinZero = (analogRead(0) / 10); //lecture de la valeur du potentiomètre
  if (valuePinZero - valuePinZero2 >= 2 || valuePinZero2 - valuePinZero >= 2) { //si cette valeur varie de plus de 2 entre deux lectures...


    valuePinZero2 = valuePinZero; //...on actualise

    MIDI_TX(176, 75, valuePinZero); //et on envoi un message du type (CONTROLLEUR CANAL 0, NUMERO 75, VALEUR = valeur lue) ==> voir tableau
    //delay(100); //pour le debuggage
  }

  //controleur ONE
  //----------------
  valuePinOne = (analogRead(1) / 10);
  if (valuePinOne - valuePinOne2 >= 2 || valuePinOne2 - valuePinOne >= 2)
  {

    valuePinOne2 = valuePinOne;

    MIDI_TX(176, 76, valuePinOne);
    //delay(100);
  }

  //controleur TWO
  //----------------
  valuePinTwo = (analogRead(2) / 10);
  if (valuePinTwo - valuePinTwo2 >= 2 || valuePinTwo2 - valuePinTwo >= 2)
  {

    valuePinTwo2 = valuePinTwo;

    MIDI_TX(176, 77, valuePinTwo);
    //delay(100);
  }

  
    //controleur THREE
    //----------------
    valuePinTHREE = (analogRead(3) / 10); //lecture de la valeur du potentiomètre
    if (valuePinTHREE - valuePinTHREE2 >= 2 || valuePinTHREE2 - valuePinTHREE >= 2) { //si cette valeur varie de plus de 2 entre deux lectures...

      valuePinTHREE2 = valuePinTHREE; //...on actualise

      MIDI_TX(176, 77, valuePinTHREE); //et on envoi un message du type (CONTROLLEUR CANAL 0, NUMERO 75, VALEUR = valeur lue) ==> voir tableau
      //delay(100); //pour le debuggage
    }

    //controleur FOUR
    //----------------
    valuePinFOUR = (analogRead(4) / 10);
    if (valuePinFOUR - valuePinFOUR2 >= 2 || valuePinFOUR2 - valuePinFOUR >= 2)
    {

      valuePinFOUR2 = valuePinFOUR;

      MIDI_TX(176, 78, valuePinFOUR);
      //delay(100);
    }

    //controleur FIVE
    //----------------
    valuePinFIVE = (analogRead(5) / 10);
    if (valuePinFIVE - valuePinFIVE2 >= 2 || valuePinFIVE2 - valuePinFIVE >= 2)
    {

      valuePinFIVE2 = valuePinFIVE;

      MIDI_TX(176, 79, valuePinFIVE);
      //delay(100);
    }


      //controleur SIX
      //----------------
      valuePinSIX = (analogRead(6) / 10); //lecture de la valeur du potentiomètre
      if (valuePinSIX - valuePinSIX2 >= 2 || valuePinSIX2 - valuePinSIX >= 2) { //si cette valeur varie de plus de 2 entre deux lectures...


        valuePinSIX2 = valuePinSIX; //...on actualise

        MIDI_TX(176, 80, valuePinSIX); //et on envoi un message du type (CONTROLLEUR CANAL 0, NUMERO 75, VALEUR = valeur lue) ==> voir tableau
        //delay(100); //pour le debuggage
      }

      //controleur SEVEN
      //----------------
      valuePinSEVEN = (analogRead(7) / 10);
      if (valuePinSEVEN - valuePinSEVEN2 >= 2 || valuePinSEVEN2 - valuePinSEVEN >= 2)
      {

        valuePinSEVEN2 = valuePinSEVEN;

        MIDI_TX(176, 81, valuePinOne);
        //delay(100);
      }

      //controleur EIGHT
      //----------------
      valuePinEIGHT = (analogRead(8) / 10);
      if (valuePinEIGHT - valuePinEIGHT2 >= 2 || valuePinEIGHT2 - valuePinEIGHT >= 2)
      {

        valuePinEIGHT2 = valuePinEIGHT;

        MIDI_TX(176, 82, valuePinEIGHT);
        //delay(100);
      }

      
        //controleur NINE
        //----------------
        valuePinNINE = (analogRead(9) / 10); //lecture de la valeur du potentiomètre
        if (valuePinNINE - valuePinNINE2 >= 2 || valuePinNINE2 - valuePinNINE >= 2) { //si cette valeur varie de plus de 2 entre deux lectures...


          valuePinNINE = valuePinNINE; //...on actualise

          MIDI_TX(176, 83, valuePinNINE); //et on envoi un message du type (CONTROLLEUR CANAL 0, NUMERO 75, VALEUR = valeur lue) ==> voir tableau
          //delay(100);//pour le debuggage
          }
          }
          


         

         void MIDI_TX(byte command, byte data1, byte data2) //pass values out through standard Midi Command
{
   Serial.write(command);
   Serial.write(data1);
   Serial.write(data2);
          }

Erreur hairless.png

mrultrapunch:
Bonjour,
je me fabrique un petit midi controller et j'utilise hairless-midiserial pour convertir le signal.
j'ai reussit a faire funcionner 8 des 10 potenciometter a partir du 9ème hairless m'envoi un message d'erreur.
Merci pour votre aide :slight_smile:

bonsoir
ce n'est pas vraiment mon domaine , mais j'ai déjà joué avec loopbe , je pense sans garantie que la "limitation" vient de loopbe1,

You may connect up to 8 applications to LoopBe's inport and up to 8 applications to the outport, all sending and receiving at the same time.

Bonsoir, merci pour ta reponse mais j'ai essayé avec plusieur autre logiciel et le probleme perciste, je ne comprend vraiment pas d'ou vien le probleme :frowning:

ce n'est pas la solution, mais tu as un "oubli" là

valuePinSEVEN = (analogRead(7) / 10);
if (valuePinSEVEN - valuePinSEVEN2 >= 2 || valuePinSEVEN2 - valuePinSEVEN >= 2)
{

valuePinSEVEN2 = valuePinSEVEN;

MIDI_TX(176, 81, valuePinOne);
//delay(100);
}

pour les deux dernière, as tu essayé de compiler en commentant "//" les lignes

edit : si c'est en hexa , 80 = 128 décimal et 1000 000 binaire

MIDI_TX(176, 81, valuePinOne); pour voir si l'erreur est toujours présente

ton problème fait penser à un travail en 8 bits pour 1 octet
les N°81 et 82 existent ?

ceci dit je ne connais pas MIDI, alors je pose des questions de néophyte

trouvé là :kestrel.fr

Les messages MIDI utilisés ont 3 paramètres :

Le Canal : utilisé pour le multiplexage 16 canaux, mais un seul canal est utilisé ici
La Note (ou touche) : allant de 0 à 127, définit quelle touche est enfoncée
La Vélocité : allant de 0 à 127, influe sur la puissance du son émis

Avec l’arduino, l’envoi d’un message est ainsi réalisé :
MIDI_TX(Canal, Note , Vélocité);

Ce qui donne par exemple :
MIDI_TX(144, 71 ,127); Canal 1, Note 71 ( B5 ), vélocité 127, soit le maximum Remarque : pour une note off, on aura simplement une vélocité de 0.

il semble que tu n'ai droit que jusqu'à 127 décimal ou 7F hexa