Go Down

Topic: Contrôleur MIDI pour Traktor Pro (Read 484 times) previous topic - next topic

tombike33

Bonjour à tous ! :)
Je suis débutant dans l'utilisation de l'Arduino et j'ai comme projet de faire un contrôleur midi du style Midi-Fighter avec 5 potentiomètres, 16 boutons et 3 switchs.
Les 3 potentiomètres fonctionnent parfaitement, cependant lorsque j'ai tenté de faire fonctionner les boutons, cela ne fonctionne pas.. J'arrive à avoir un message dans le moniteur série uniquement lorsque j'appuie sur le bouton ( ce qui n'était pas le cas avant.. ^^' ). Mais le problème est que j'ai toujours le message quelque soit le bouton sur lequel j'appuie.. et par conséquent Traktor ne reconnait pas sur quel bouton j'appuie.. J'ai essayé de suivre des tutoriels sur le net, mais je n'en ai trouvé aucun qui répond à mon problème sur les boutons.. Donc pouvez vous m'aider à corriger ca ?

Voici le code que j'ai rentré jusqu'ici, il y aura surement pas mal d'erreur et de petits (voir grands) problème.. Mais bon c'est pour ca que je suis ici ;)



// 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;

//Digital Pin
int valueBouton0;
int valueBouton1;
int valueBouton2;
int valueBouton3;
int valueBouton4;
int valueBouton5;
int valueBouton6;
int valueBouton7;
int valueBouton8;

void setup()
{
Serial.begin(57600); // vitesse de communication
}

void loop()
{
//controleur ZERO
//----------------
valuePinZero = (analogRead(1)/8); //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(2)/8);
if (valuePinOne - valuePinOne2 >=2 || valuePinOne2 - valuePinOne >=2)
{

valuePinOne2 = valuePinOne;

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

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

valuePinTwo2 = valuePinTwo;

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

//controleur THREE
//----------------
valuePinThree = (analogRead(4)/8);
if (valuePinThree - valuePinThree2 >=2 || valuePinThree2 - valuePinThree >=2)
{
 
valuePinThree2 = valuePinThree;

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

//controleur Four
//----------------
valuePinFour = (analogRead(5)/8);
if (valuePinFour - valuePinFour2 >=2 || valuePinFour2 - valuePinFour >=2)
{
 
valuePinFour2 = valuePinFour;

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

//B1
//----------------
valueBouton1 = digitalRead(0);
if (valueBouton1 = LOW)
{
MIDI_TX(176,90, 1);
delay(10);
}


//B0
//----------------
valueBouton0 = digitalRead(13);
if (valueBouton0 != HIGH)
{
MIDI_TX(176,91, 0);
delay(10);
}

//B2
//----------------
valueBouton2 = digitalRead(1);
if (valueBouton2==LOW)
{
MIDI_TX(176,92, 2);
delay(10);
}

//B3
//----------------
valueBouton3 = digitalRead(2);
if (valueBouton3 != HIGH)
{
MIDI_TX(176,93, 3);
delay(10);
}

}

void MIDI_TX(unsigned char MESSAGE, unsigned char DONNEE1, unsigned char DONNEE2) //fonction d'envoi du message MIDI ==> voir tableau
{
Serial.write(MESSAGE); //envoi de l'octet de message sur le port série
Serial.write(DONNEE1); //envoi de l'octet de donnée 1 sur le port série
Serial.write(DONNEE2); //envoi de l'octet de donnée 2 sur le port série
}



Voilà :)

Merci à vous ;)

tombike33


bilbo83

Bonjour tombike33,

Je crois comprendre que ton MIDI_TX envoi des messages de Control Change sur le canal 1.
Pour les boutons, tu envois des valeurs 1,2,3.
En général on envoi 0 ou 127.

Voilà j'espère que cela règlera ton problème.

Bilbo83

Go Up