Un poussoir pour 6 LED

Bonjour à toutes et à tous

Je suis un grand novice dans le monde de ARDUINO
je m'intéresse beaucoup à l'électronique et me met au monde de Arduino.

J'ai fait l’acquisition du livre ARDUINO de Erick Bartmann.

Je suis arrivé au projet "une histoire de rebond"

A la fin on nous demande de créer un projet avec UN seul bouton poussoir qui allume 6 led une à une à chaque pression en éteignant à chaque fois la précédente.

J'ai essayer plusieurs solution en modifiant le sketch d'origine mais j'arrive à allumer que 2 led l'une après l'autre et les 4 autres restent éteinte.

Il n'y a pas la solution de donné et j'aimerai la connaitre car je suis sur qu'en faite ça doi-être tout simple et tellement simple que je n'y arrive pas.

Voici le sketch que j'ai modifié:

[b]//Histoire de rebond, allumer 6 led une à une avc un seul BP.

int buttonPin = 2;             //Bouton-poussoir en broche 2
int buttonValue = 0;          //Variable pour enregistrer l'état du bouton-poussoir
int previousButtonValue = 0;  //Variable pour enregistrer l'ancien état du bouton-poussoir
int ledPin1= 8;               //Led1 en broche 8
int ledPin2= 9;               //Led2 en broche 9
int ledPin3= 10;              //Led3 en broche 10
int ledPin4= 11;              //Led4 en broche 11
int ledPin5= 12;              //Led5 en broche 12
int ledPin6= 13;              //Led6 en broche 13
int counter= 0;               //Variable de compteur


void setup() {

 pinMode(buttonPin, INPUT);   //Buton-poussoir comme entrée
 pinMode(ledPin1, OUTPUT);    //Broche LED1 comme sortie
 pinMode(ledPin2, OUTPUT);    //Broche LED2 comme sortie
 pinMode(ledPin3, OUTPUT);    //Broche LED3 comme sortie
 pinMode(ledPin4, OUTPUT);    //Broche LED4 comme sortie
 pinMode(ledPin5, OUTPUT);    //Broche LED5 comme sortie
 pinMode(ledPin6, OUTPUT);    //Broche LED6 comme sortie

}

void loop() {
//LED1
   buttonValue = digitalRead (buttonPin); //Interrogation du bouton-poussoir

  if(previousButtonValue != buttonValue){
    if(buttonValue == HIGH){
      counter++;                         //Incrémentation du compteur (+1)
    }
  }
  previousButtonValue = buttonValue;     //Sauvegarde de la valeur actuelle du bouton-poussoir
  if(counter % 2 ==0)                    //Variable du compteur
  digitalWrite(ledPin1,HIGH);
else
  digitalWrite(ledPin1,LOW);
delay(10);                               //Attendre 10ms avant d'intérroger à nouveau le bouton-poussoir

 

//LED2

   buttonValue = digitalRead (buttonPin); //Interrogation du bouton-poussoir

  if(previousButtonValue != buttonValue){
    if(buttonValue == HIGH){
      counter++;                         //Incrémentation du compteur (+1)
    }
  }
  previousButtonValue = buttonValue;     //Sauvegarde de la valeur actuelle du bouton-poussoir
  if(counter % 2 ==1)                    //Variable du compteur
  digitalWrite(ledPin2,HIGH);
else
  digitalWrite(ledPin2,LOW);
delay(10);                               //Attendre 10ms avant d'intérroger à nouveau le bouton-poussoir





//LED3
delay(20);
   buttonValue = digitalRead (buttonPin); //Interrogation du bouton-poussoir

  if(previousButtonValue != buttonValue){
    if(buttonValue == HIGH){
      counter++;                         //Incrémentation du compteur (+1)
    }
  }
  previousButtonValue = buttonValue;     //Sauvegarde de la valeur actuelle du bouton-poussoir
  if(counter % 3==0)                    //Variable du compteur
  digitalWrite(ledPin3,HIGH);
else
  digitalWrite(ledPin3,LOW);
delay(10);                               //Attendre 10ms avant d'intérroger à nouveau le bouton-poussoir


}[/b]

Voilà je bloque à la LED3 qui forcément s'allume en même temps que la 1 et la 2 par intervalle vu que j'ai utilisé l'opérateur MODULO qui peut être soit pair soit impaire donc que deux possibilités.

Avez vous une solution avec un petit cours dessus

Merci pour votre aide.

bonjour,
inspire toi du code que j’avais donné pour faire un chenillard

EDIT
et mets le code entre </>

3ZEF:
vu que j'ai utilisé l'opérateur MODULO qui peut être soit pair soit impaire donc que deux possibilités.

Non, le modulo te retourne le reste d'une division, par 2 ou n'importe quel autre nombre entier, par exemple
14 = 2 x 5 + 4,
donc 14 modulo 5 ça fait 4

ici il faudra utiliser (counter % 6), qui prend successivement les valeurs 0, 1, 2, 3, 4 et 5.

Merci à vous tous

Je vais essayer ce que vous me conseillez.

Christian_R ta formule m'intéresse énormément.
Peux tu m'expliquer comment la trouver, c'est à dire la j'ai 6 LED donc tu as fait:
14=2X5+4 je n'ai pas bien compris peux tu m'expliquer

imaginons que après je veux faire avec 7 LED ou plus, comment calculer?
Merci

J'ai compris tout seul en faisant l'essais

En faite on prend le nombre de LED (dans mon cas 6) et on le transforme en 6% et on par de 0 à 5

Donc voici le SKETCH final
mille merci pour votre aide:
:slight_smile:

[b]//Histoire de rebond, allumer 6 led une à une avc un seul BP.

[color=blue]int[/color] buttonPin = 2;                 [u]//Bouton-poussoir en broche 2[/u]
[color=blue]int[/color] buttonValue = 0;              [u]//Variable pour enregistrer l'état du bouton-poussoir[/u]
[color=blue]int[/color] previousButtonValue = 0;  [u]//Variable pour enregistrer l'ancien état du bouton-poussoir[/u]
[color=blue]int[/color] ledPin1= 8;                     [u]//Led1 en broche 8[/u]
[color=blue]int[/color] ledPin2= 9;                     [u]//Led2 en broche 9[/u]
[color=blue]int[/color] ledPin3= 10;                   [u]//Led3 en broche 10[/u]
[color=blue]int[/color] ledPin4= 11;                   [u]//Led4 en broche 11[/u]
[color=blue]int[/color] ledPin5= 12;                   [u]//Led5 en broche 12[/u]
[color=blue]int[/color] ledPin6= 13;                   [u]//Led6 en broche 13[/u]
[color=blue]int[/color] counter= 6;                    [u] //Variable de compteur[/u]


void setup() {

pinMode(buttonPin, INPUT);   //Buton-poussoir comme entrée
pinMode(ledPin1, OUTPUT);    //Broche LED1 comme sortie
pinMode(ledPin2, OUTPUT);    //Broche LED2 comme sortie
pinMode(ledPin3, OUTPUT);    //Broche LED3 comme sortie
pinMode(ledPin4, OUTPUT);    //Broche LED4 comme sortie
pinMode(ledPin5, OUTPUT);    //Broche LED5 comme sortie
pinMode(ledPin6, OUTPUT);    //Broche LED6 comme sortie

}

void loop() {
//LED1
  buttonValue = digitalRead (buttonPin); //Interrogation du bouton-poussoir

 if(previousButtonValue != buttonValue){
   if(buttonValue == HIGH){
     counter++;                         //Incrémentation du compteur (+1)
   }
 }
 previousButtonValue = buttonValue;     //Sauvegarde de la valeur actuelle du bouton-poussoir
 if(counter % 6 ==0)                    //Variable du compteur
 digitalWrite(ledPin1,HIGH);
else
 digitalWrite(ledPin1,LOW);
delay(10);                               //Attendre 10ms avant d'intérroger à nouveau le bouton-poussoir



//LED2

  buttonValue = digitalRead (buttonPin); //Interrogation du bouton-poussoir

 if(previousButtonValue != buttonValue){
   if(buttonValue == HIGH){
     counter++;                         //Incrémentation du compteur (+1)
   }
 }
 previousButtonValue = buttonValue;     //Sauvegarde de la valeur actuelle du bouton-poussoir
 if(counter % 6 ==1)                    //Variable du compteur
 digitalWrite(ledPin2,HIGH);
else
 digitalWrite(ledPin2,LOW);
delay(10);                               //Attendre 10ms avant d'intérroger à nouveau le bouton-poussoir





//LED3

delay(20);
  buttonValue = digitalRead (buttonPin); //Interrogation du bouton-poussoir

 if(previousButtonValue != buttonValue){
   if(buttonValue == HIGH){
     counter++;                         //Incrémentation du compteur (+1)
   }
 }
 previousButtonValue = buttonValue;     //Sauvegarde de la valeur actuelle du bouton-poussoir
 if(counter % 6==2)                    //Variable du compteur
 digitalWrite(ledPin3,HIGH);
else
 digitalWrite(ledPin3,LOW);
delay(10);                               //Attendre 10ms avant d'intérroger à nouveau le bouton-poussoir


//LED4

delay(20);
  buttonValue = digitalRead (buttonPin); //Interrogation du bouton-poussoir

 if(previousButtonValue != buttonValue){
   if(buttonValue == HIGH){
     counter++;                         //Incrémentation du compteur (+1)
   }
 }
 previousButtonValue = buttonValue;     //Sauvegarde de la valeur actuelle du bouton-poussoir
 if(counter % 6==3)                    //Variable du compteur
 digitalWrite(ledPin4,HIGH);
else
 digitalWrite(ledPin4,LOW);
delay(10);                               //Attendre 10ms avant d'intérroger à nouveau le bouton-poussoir

//LED5

delay(20);
  buttonValue = digitalRead (buttonPin); //Interrogation du bouton-poussoir

 if(previousButtonValue != buttonValue){
   if(buttonValue == HIGH){
     counter++;                         //Incrémentation du compteur (+1)
   }
 }
 previousButtonValue = buttonValue;     //Sauvegarde de la valeur actuelle du bouton-poussoir
 if(counter % 6==4)                    //Variable du compteur
 digitalWrite(ledPin5,HIGH);
else
 digitalWrite(ledPin5,LOW);
delay(10);                               //Attendre 10ms avant d'intérroger à nouveau le bouton-poussoir

//LED6

delay(20);
  buttonValue = digitalRead (buttonPin); //Interrogation du bouton-poussoir

 if(previousButtonValue != buttonValue){
   if(buttonValue == HIGH){
     counter++;                         //Incrémentation du compteur (+1)
   }
 }
 previousButtonValue = buttonValue;     //Sauvegarde de la valeur actuelle du bouton-poussoir
 if(counter % 6==5)                    //Variable du compteur
 digitalWrite(ledPin6,HIGH);
else
 digitalWrite(ledPin6,LOW);
delay(10);                               //Attendre 10ms avant d'intérroger à nouveau le bouton-poussoir

}[/b]

C'est bon.
Tu peux alléger le code, à la place des nombreux if (...) mettre un seul SwichCase

et mettre en balise code </> ton code

Pour la deuxième fois (de ma part) : http://forum.arduino.cc/index.php?topic=315372.0

Merci
on va essayer :smiley:

B@tto désolé j’ai réagit un peut tard mais c’est fait :wink:

MWE je ne comprends pas comment utiliser case c'est trop vague comme explication.
Je ne sait pas où et comment l'utiliser.

Une petite explication spécial nul serait la bien-venue

Bonjour,
Consulte le point 2 de Bienvenue sur le forum de la communauté francophone

icare:
Bonjour,
Consulte le point 2 de Bienvenue sur le forum de la communauté francophone

Désolé j'ai tout fait à l'envers lol