Variable dont la valeur change toute seule

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

J'ai testé mes variables et il apparait qu'elles sont ASCII,

Quelles variables et dans quelle partie du code?

Dans loop() tu as ça

  for(i=8;i<=11;i++) 
  { 
    digitalWrite(i, LOW); //allumer une ligne
    for(j=2;j<=5;j++)

Dans push() tu fais ça

  m--;
  n--;

  sprintf(message, "loop *%d* *%d*", m-7, n-1);
  Serial.println(message);
  int o = leds[m][n];

Pour afficher à l'écran tu soustrais 7 de m et 1 de n
Pour adresser leds tu utilises n et m directement.

@fdufnews effectivement c'était tout simplement ça et je cherchais autre part haha, merci bien :slight_smile: