Bonjour,
Je suis en train de créer un launchpad de 16 bouttons matricés avec 16 leds RGB (non matricées) dont je n'utilise que le vert et bleu.
Le tout est connecté à un arduino mega de cette manière :
PIN 22, 24, 26 ... 48, 50, 52 -> leds vertes (négatif)
PIN 23, 25, 27 ... 49, 51, 53 -> leds bleus (négatif)
PIN 13 -> positif des leds
PIN 2, 3, 4, 5 -> matrice en entrée
PIN 8, 9, 10, 11 -> matrice en sortie
J'envois ensuite les données en protocole MIDI par le serial USB puis je récupere les infos avec LoopMIDI et Serial MIDI converter V2D.
Tout fonctionne sauf que je ne parviens pas à récupérer le numéro de led a allumer lorsqu'on appuie sur un bouton...
J'ai donc crée un tableau de 4*4 dans lequel j'ai stocké le pin de led de chaque bouton. Je récupère donc la ligne et colonne du bouton et vais voir dans le tableau a cet emplacement la quel pin allumer, SAUF QUE ça me renvoit une valeur aléatoire... je suppose donc ne pas être dans la zone mémoire qui m'est allouée sauf que quand je vais au même emplacement en entrant les donnée manuellement, je récupère bien le pin. Je n'y comprends rien.
J'ai testé mes variables et il apparait qu'elles sont ASCII, Whitespace, control et space or dans la console je vois bien mes chiffres sans espaces avant ou après... (Arduino - Home )
Voila mon code :
/*
Matrice de boutons 16x
by Simon Dethier
*/
int i;
int j;
int f;
int e;
char message[20];
int leds[4][4];
void setup()
{
Serial.begin(57600); // vitesse de communication
//-----------BOUTONS----------------------
// initialiser les pins de 2 à 5 en entrée
for(i=2;i<=5;i++)
pinMode(i, INPUT_PULLUP);
// initialiser les pins de 8 à 11
for(i=8;i<=11;i++)
{
pinMode(i, OUTPUT);
digitalWrite(i, HIGH);
}
//------------LEDS----------------------
//Positif des leds
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
//Allumer negatif de toutes les leds bleues
for(i=23; i<=53; i=i+2)
{
pinMode(i, OUTPUT);
digitalWrite(i, HIGH);
}
//Allumer negatif de toutes les leds vertes
for(i=22; i<=53; i=i+2)
{
pinMode(i, OUTPUT);
digitalWrite(i, HIGH);
}
//Initialiser le tableau avec les pins des leds par case
for(i=0, f=22;i<4;i++)
{
for(j=0;j<4;j++,f+=2)
{
leds[i][j] = f;
e = leds[i][j];
// DEBUG
sprintf(message, "init %d %d = %d %d", i, j, f, e);
Serial.println(message);
}
}
}
void loop()
{
for(i=8;i<=11;i++)
{
digitalWrite(i, LOW); //allumer une ligne
for(j=2;j<=5;j++)
{
if(digitalRead(j)==LOW) //si un bouton est enclenché (courant passe)
{
// DEBUG
sprintf(message, "loop %d %d", i-7, j-1);
Serial.println(message);
push(i,j); //Envoi de la ligne et colonne
delay(125);
}
}
digitalWrite(i, HIGH);
}
}
void MIDI_TX(unsigned char MESSAGE, unsigned char DONNEE1, unsigned char DONNEE2) //fonction d'envoi du message MIDI
{
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
}
void push(int m, int n)
{
m--;
n--;
// DEBUG
sprintf(message, "loop *%d* *%d*", m-7, n-1);
Serial.println(message);
int o = leds[m][n];
// DEBUG
Serial.println(o);
//MIDI_TX(144,62, 127); //62=Do 127=intensité ON
digitalWrite(o, LOW);
delay(125);
//MIDI_TX(144,62, 0); //62=Do OFF
digitalWrite(o, HIGH);
}
J'espère que vous pourrez m'aider.
Mod
