6 Leds avec bouton poussoir

Bonjour,

Je viens de commencer avec Arduino. Je souhaiterai allumer 6 leds avec le meme bouton poussoir mais je ne sais pas s'il faut les brancher en parallèle ou en série et si je dois seulement ajouter les pins de leds au programme.

J'ai un premier programme pour allumer une led avec un bouton poussoir:

http://eskimon.fr/wp-content/uploads/tuto/344788.png

//le bouton est connecté à la broche 2 de la carte Adruino
const int bouton = 2;
//la LED à la broche 13
const int led = 13;
 
//variable qui enregistre l'état du bouton
int etatBouton;

void setup()
{
    pinMode(led, OUTPUT); //la led est une sortie
    pinMode(bouton, INPUT); //le bouton est une entrée
    etatBouton = LOW; //on initialise l'état du bouton comme "relaché"
}

void loop()
{
    etatBouton = digitalRead(bouton); //Rappel : bouton = 2
    
    if(etatBouton == LOW) //test si le bouton a un niveau logique HAUT
    {
        digitalWrite(led,HIGH); //le bouton est relâché, la LED est allumée
    }
    else  //test si le bouton a un niveau logique différent de HAUT (donc BAS)
    {
        digitalWrite(led,LOW); //la LED reste éteinte
    }
}

Merci d'avance pour votre aide

as tu fais des recherches???

je te donne un lien du site arduino... la seule difference entre ton application et celui du site, c'est qu'il y a un portard au lieu d'un bouton, mais rien de compliqué de réaliser le changement pour ton application

il y a 10 led branché sur les pins avec autant de resistance de 220ohm

tu as donner un programme pour 1 led, dans le lien tu as un exemple pour 10led..
donc maintenant a toi de faire une petite adaptation pour tes besoins.

Merci beaucoup hazerty, je verrai ça tout de suite

Bonjour,

Si tes 6 leds doivent toujours être commandées ensembles tu peux les mettre en parallèle, avec chacune leur résistance.
Comme l'intensité sera de l'ordre de 120mA, il te faudra un transistor pour les commander.

Si tu as des sorties de libre, la solution de hazerty565 te permet de te passer de transistor.

J’ai fait quelques modifications e nchangeant analogpin par bouton mais je ne sais pas par quoi remplacer “int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);”. Auriez-vous une idée ?

// these constants won't change:
const int bouton = 2;   // the pin that the potentiometer is attached to
const int ledCount = 10;    // the number of LEDs in the bar graph

int ledPins[] = {
  2, 3, 4, 5, 6, 7, 8, 9, 10, 11
};   // an array of pin numbers to which LEDs are attached


void setup() {
  // loop over the pin array and set them all to output:
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT);
  }
}

void loop() {
  // read the potentiometer:
  int etatbouton = digitalRead(bouton);
  // map the result to a range from 0 to the number of LEDs:
  int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);

  // loop over the LED array:
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    // if the array element's index is less than ledLevel,
    // turn the pin for this element on:
    if (thisLed < ledLevel) {
      digitalWrite(ledPins[thisLed], HIGH);
    }
    // turn off all pins higher than the ledLevel:
    else {
      digitalWrite(ledPins[thisLed], LOW);
    }
  }
}

Il ne faut pas que tu partes du programme de vumetre.
Il faut que tu partes de ton programme, tu déclares un tableau de ledPins comme dans ce programme et au lieu d'allumer/éteindre une seule led, tu allumes/éteints toutes les leds avec une boucle.

Je suis parti du premier programme Kamill. J’ai modifié le programme mais y a toujours un beug dans le loop

//le bouton est connecté à la broche 2 de la carte Adruino
const int bouton = 2;

const int ledCount = 6;
 
int etatBouton;

int ledPins[] = {3, 4, 5, 6, 7, 8}; 
void setup()
{
   
    pinMode(bouton, INPUT); //le bouton est une entrée
    etatBouton = LOW; //on initialise l'état du bouton comme "relaché"
    for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT);
}

void loop()

{    
  etatBouton = digitalRead(bouton); //Rappel : bouton = 2
}

     for (int thisLed = 0; thisLed < ledCount; thisLed++) {

    if(etatBouton == LOW)
    {
    if (thisLed < ledLevel) {
      digitalWrite(ledPins[thisLed], HIGH);
    }
    
    }
      
    else {
      digitalWrite(ledPins[thisLed], LOW);
    }
     }

Il manque un } à la fin du setup

Merci. Sinon tu penses que ca devrait marcher ?

Toutes les leds s'allument d'un coup mais lorsque j'appuie sur le bouton poussoir elles restent toujours allumées

Il y en a un } de trop après etatBouton= …

Utilises les touches Ctrl T pour formater ton code, tu verras immédiatement les crochets qui ne correspondent pas

Supprimes le test if (thisLed < ledLevel) { qui n’a pas lieu d’être

et ça devrait fonctionner

Mets ton dernier code

Voici mon dernier code:

 //le bouton est connecté à la broche 2 de la carte Adruino
const int bouton = 2;

const int ledCount = 6;
 
int etatBouton;

int ledPins[] = {3, 4, 5, 6, 7, 8}; 
void setup()
{
   
    pinMode(bouton, INPUT); //le bouton est une entrée
    etatBouton = LOW; //on initialise l'état du bouton comme "relaché"
    for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT);
}
}
void loop()

{    
  etatBouton = digitalRead(bouton); //Rappel : bouton = 2


     for (int thisLed = 0; thisLed < ledCount; thisLed++) {

    if(etatBouton == LOW)
    {
      digitalWrite(ledPins[thisLed], HIGH);
    
    }
      
    else {
      digitalWrite(ledPins[thisLed], LOW);
      
    }
     }
     }

Les leds s’allument toutes d’un coup et lorsque j’appuie sur le bouton elles s’éteignent mais se rallument une fois que je lâche le bouton. En fait j’aimerai que quand j’appuie sur le bouton une led s’allume, j’appuie une 2eme fois sur le bouton, une 2eme s’allume et ainsi de suite…

Pour cela il faut que tu incrémente un compteur chaque fois que tu appuies sur le bouton.
Pour détecter l'appui sur le bouton (et non l'état), il faut que tu mémorises l'état précédent
Ensuite si etatBouton==LOW et etatBoutonPrecedent==HIGH tu vens d'appuyer donc tu incrémente le compteur.

J’ai fait ça mais malheureusement ça ne change rien

//le bouton est connecté à la broche 2 de la carte Adruino
const int bouton = 2;
int compteur=0;
const int ledCount = 6;
int etatboutonprecedent; 
int etatBouton;

int ledPins[] = {3, 4, 5, 6, 7, 8}; 
void setup()
{
   etatboutonprecedent= LOW;
    pinMode(bouton, INPUT); //le bouton est une entrée
    etatBouton = LOW; //on initialise l'état du bouton comme "relaché"
    for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT);
}
}
void loop()

{    
  etatBouton = digitalRead(bouton); //Rappel : bouton = 2


     for (int thisLed = 0; thisLed < ledCount; thisLed++) 
     {

    if(etatBouton == LOW) 
    {
      if (etatboutonprecedent== LOW)
      {
      digitalWrite(ledPins[thisLed], HIGH);
    
    }
    }
    else {
      digitalWrite(ledPins[thisLed], LOW);
      
    }
     }


     compteur ++;
     }

Il faut dissocier l'incrémentation du compteur de l'affichage
Il faut allumer le nombre de leds correspondant au compteur

tu as mis un compteur, c’est bien, mais tu ne l’utilise pas…

ledPins[thisLed] = compteur++;

autrement tu as thisLEd ++ qui est deja un compteur, tu peux l’utiliser…

J’ai réussi à les allumer à la suite:

//le bouton est connecté à la broche 2 de la carte Adruino
const int bouton = 2;
int compteur=0;
const int ledCount = 6;
int etatboutonprecedent; 
int etatBouton;

int ledPins[] = {3, 4, 5, 6, 7, 8}; 
void setup()
{
   etatboutonprecedent= LOW;
    pinMode(bouton, INPUT); //le bouton est une entrée
    etatBouton = LOW; //on initialise l'état du bouton comme "relaché"
    for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT);
}
}
void loop()

{    
  
  
  etatBouton = digitalRead(bouton); //Rappel : bouton = 2


   
    if(etatBouton == HIGH) 
    {
      if (etatboutonprecedent== LOW)
      {
        
      digitalWrite(ledPins[compteur], HIGH);
      compteur ++;
      delay(500);
     
    }
    }
    else {
      digitalWrite(ledPins[compteur], LOW);
      
    }
    if(compteur == 6)
    {
      compteur = 0; 
    }
     
     
     
     }

Merci tous pour votre aide. Je vais maintenant continuer le programme pour éteindre les leds à la suite

etatboutonprecedent n'est jamais mis à jour
Vire ton delay et mets etatboutonprecedent=etatBouton; à la fin de la loop

Merci pour ton aide kamill