Le retour du proleme de LED

Bonjour,
Je reviens vers vous pour un nouveau problème.
J'en suis toujours au tout début de mon apprentissage arduino/électronique.
J'ai fait le petit montage suivant:

20200618_162837_002.jpg

Il représente un dés.
Le programme qui vas avec demande l'allumage, à la suite, de chaque face du dés (0,1,2,3,4 et 5).

// definition des pins sur l'arduino
int pinLed[5] = {2, 3, 4, 5, 6};
//Tableau à double entrée listant l'etat des leds
boolean affichage[6][5] = {
  0, 0, 0, 0, 0, //Si le tirage du des est de 0
  0, 0, 1, 0, 0, //Si le tirage du des est de 1
  0, 1, 0, 0, 1, //Si le tirage du des est de 2
  0, 1, 1, 0, 1, //Si le tirage du des est de 3
  1, 1, 0, 1, 1, //Si le tirage du des est de 4
  1, 1, 1, 1, 1 //Si le tirage du des est de 5
};

void setup()
{
  for (int i = 2; i < 7; i ++ )
  {
    pinMode(pinLed[i], OUTPUT); // definition des modes
    digitalWrite(pinLed[i], LOW); //exctinction des leds
  }

}

void loop()
{
  for (int i = 0; i < 6; i++) // boucle par ligne
  {
    for (int k = 0; k < 5; k++) // boucle par colonne (chaque colonne correspond à un pin)
    {
      boolean etat = affichage[i][k]; //etat correspond à l'etat des leds suivant chaques lignes
      digitalWrite(pinLed[k], etat); //on active ou pas les leds suivant "etat"
    }
    //pause d'une seconde entre chaque etat
    delay(1000);
  }

}

Il fonctionne correctement mais sur les 5 leds, 2 ne s'allument pas correctement.
Toutes les leds sont identiques, les résistances sont des 220Ohm.
Chaque leds est relié à un pin arduino qui doit donc lui fournir ses 5V pour l'allumage.
Les communs sont tous reliés à un GND de l'arduino.
Cela donne à peu prêt cela:

20200618_164720.jpg

Je ne comprend donc pas pourquoi 3 leds s'allument correctement et pas les 2 autres.
Le pire c'est qu'avec un autre programme, j'allume les 5 en même temps et elles s'allument toutes avec la même intensité.

void setup()

{
  for (int i = 2; i < 7; i++)
  {
    pinMode(i, OUTPUT); // declaration des modes
    digitalWrite(i, HIGH); // allumage des 5 leds
  }

}

void loop()
{


}

Quelqu'un pourrait il m'aider ?

Par avance merci.

PS: le programme de base n'est pas terminé.

20200618_162837_002.jpg

20200618_164720.jpg

Le pire c'est qu'avec un autre programme, j'allume les 5 en même temps et elles s'allument toutes avec la même intensité.

Et tu ne penses même pas que le problème puisse être au niveau logiciel ?

J'ai ajouté les 2 programmes utilisés pour donner plus d'infos.

Bonjour,

Vérifies le sens de branchement de tes les (sur ton schéma elles sont branchées à l'envers)

Bonjour,
Le branchement est bon.
En fait, il est testé par le second programme (il à été crée pour ca d'ailleurs). Toutes les leds s'alluement correctement. Helas .. ca m'aurais facilité la vie hihi

Je préfère t'apprendre à pêcher plutôt que te donner un poisson.

Si tu utilisais Serial pour afficher le N° de la LED à allumer et son état ?

Compare un peu les setup.

Bonjour,

Met toi à la place du processeur et interprète tes lignes une par une pour comprendre ce que fait le programme.
Prend le temps de bien lire et décomposer chaque instruction, sans anticiper sur ce que tu as voulu faire, comme si tu montais un meuble ikea et que tu le fais pour la première fois.

Tu verras que le problème te sautera au yeux... :wink:

Quelquefois, le cerveau interprète ce qu'il voit avec les yeux, et corrige pour le remplacer par ce qu'il veut voire (comme la tâche de Marriote)

OK,
Merci de vos réponses.
J'en ai fini pour ce soir mais des demain matin je regarde çà de plus prêt !
Au moins il y a une réponse à mon problème, çà me soulage.

fdufnews:
Compare un peu les setup.

Je confirme...

Bon, en fait, sous peine de ne pas dormir de la nuit je m'y suis remis.
Voici la modification du programme suivit de l'affichage du serial:

// definition des pins sur l'arduino
int pinLed[5] = {2, 3, 4, 5, 6};
//Tableau à double entrée listant l'etat des leds
boolean affichage[6][5] = {
  0, 0, 0, 0, 0, //Si le tirage du des est de 0
  0, 0, 1, 0, 0, //Si le tirage du des est de 1
  0, 1, 0, 0, 1, //Si le tirage du des est de 2
  0, 1, 1, 0, 1, //Si le tirage du des est de 3
  1, 1, 0, 1, 1, //Si le tirage du des est de 4
  1, 1, 1, 1, 1 //Si le tirage du des est de 5
};

void setup()
{
  Serial.begin(9600);
  for (int i = 2; i < 7; i ++ )
  {
    pinMode(pinLed[i], OUTPUT); // definition des modes
    digitalWrite(pinLed[i], LOW); //exctinction des leds
  }

}

void loop()
{
  for (int i = 0; i < 6; i++) // boucle par ligne
  {
    for (int k = 0; k < 5; k++) // boucle par colonne (chaque colonne correspond à un pin)
    {
      boolean etat = affichage[i][k]; //etat correspond à l'etat des leds suivant chaques lignes
      digitalWrite(pinLed[k], etat); //on active ou pas les leds suivant "etat"
      Serial.print(affichage[i][k]);    
    }
    //pause d'une seconde entre chaque etat
    Serial.println();
    Serial.println("*****");
    delay(1000);
  }

}

Serial.JPG

J'obtiens bien ce que je desirais.
Je reprécise que le programme fonctionne. Il il y a juste les leds sur les pins 2 et 3 qui s'allument mais très très faiblement.
Et pour le setup, vu que j'utilise les pins de 2 à 6 j'utilise int pinLed[5] = {2, 3, 4, 5, 6};
Etant grand debutant, je ne vois pas ce qui coince. Pourquoi en testant les 5 leds en même temps, toutes s'allument correctement mais pas avec l'autre programme :confused:

Serial.JPG

  for (int i = 2; i < 7; i ++ )
  {
    pinMode(pinLed[i], OUTPUT); // definition des modes
    digitalWrite(pinLed[i], LOW); //exctinction des leds
  }

Que se passe-t-il lorsque ton indice varie ?

Parce que le setup entre les 2 est différent

lesept:

  for (int i = 2; i < 7; i ++ )

{
   pinMode(pinLed[i], OUTPUT); // definition des modes
   digitalWrite(pinLed[i], LOW); //exctinction des leds
 }



Que se passe-t-il lorsque ton indice varie ?

Lorsqu'il varie il indique que pinLed[2] est OUPUT puis pinLed[3] est OUTPUT jusqu'à pinLed[6]. pinLed 2 à 6 etant les pins de connexion sur l'arduino.
Ensuite je vient chercher dans le tableau boolean "affichage" les valeurs par:
"for (int i = 0; i < 6; i++) // boucle par ligne
{
for (int k = 0; k < 5; k++) // boucle par colonne (chaque colonne correspond à un pin)
{
boolean etat = affichage*[k]; //etat correspond à l'etat des leds suivant chaques lignes*

  • digitalWrite(pinLed[k], etat); //on active ou pas les leds suivant "etat""*
    De 0 à 5 pour saisir la ligne, puis de 0 à 4 qui correspond à l'etat HIGH/LOW de chaque pin.

bonsoir,

ce qu'ils essayent de te faire comprendre, c'est que pinLed[2] est en fait 4 en non 2.

j'espère que ça va enfin te mettre sur la voie ...

Ton tableau est défini ici

int pinLed[5] = {2, 3, 4, 5, 6};

Les indices vont donc de 0 à 4, pas de 2 à 7...

Of course ...
J'ai oublié d'appliquer la règle du tableau dans ma déclaration d'OUTPUT alors que je le fais correctement plus bas.
Maintenant que je le vois, ça saute aux yeux effectivement.
En tout cas, merci à tous pour votre patience et votre pédagogie.C'est plus simple avec une personne physique mais ça marche aussi par forum interposé :smiley:
Encore merci et à la prochaine :wink: