3 leds avec 3 BP pour Arduino

Bonjour
débutant sur Arduino, j'essaye un montage simple : le but : 3 boutons poussoir
chacun d'eux doit allumer une led (les autres doivent s'éteindre)
En fait sur 3 leds, une seule doit s'allumer
un Bp pour led verte
un Bp pour led rouge
un Bp pour led jaune
sachant qu'à la mise sous tension, seul la led verte doit être allumée : si on appuie sur le Bp Jaune pou Bp Rouge, la led verte s'éteint et la jaune ou la led rouge s'allume e,n fonction du Bp choisi et ainsi de suite

Ci-joint le code que j'ai essayé mais cela ne fonctionne pas

[code]


#include <OneButton.h>

const byte buttonPin1 = 4; // notre bouton est sur la pin 4 allume la verte
const byte buttonPin2 = 5; // notre bouton est sur la pin 5 allume la rouge
const byte buttonPin3 = 6; // notre bouton est sur la pin 6 allume la jaune

OneButton button1(buttonPin1, true); // true pour le mettre en INPUT_PULLUP
OneButton button2(buttonPin2, true); // true pour le mettre en INPUT_PULLUP
OneButton button3(buttonPin3, true); // true pour le mettre en INPUT_PULLUP


// les pins utilisées pour les LEDs

const byte pinLedVerte = 0;
const byte pinLedRouge = 1;
const byte pinLedJaune = 2;


// la liste des états possible de notre système
// ainsi qu'une variable etatCourant prenant une de ces valeurs
enum {REPOS, ETAT_R, ETAT_V} etatCourant1, etatCourant2, etatCourant3;

// ------------------------------------------------------
// Cette fonction installe l'état initial
// ------------------------------------------------------
void mettreAuRepos()
{


  digitalWrite(pinLedVerte, HIGH);
  digitalWrite(pinLedRouge, LOW);
  digitalWrite(pinLedJaune, LOW);

  etatCourant1 = REPOS;
  etatCourant2 = REPOS;
  etatCourant3 = REPOS;

}

// ------------------------------------------------------
// La fonction de call back, appellée automatiquement quand on clique
// ------------------------------------------------------
void simpleclick1()
{
  switch (etatCourant1) {
    case REPOS: // on était au repos et on a un appui, on allume la verte
      digitalWrite(pinLedVerte, HIGH); // LED rouge ETEINTE, JAUNE eteinte
      digitalWrite(pinLedRouge, LOW);
      digitalWrite(pinLedJaune, LOW);
      etatCourant1 = ETAT_R; // on note le nouvel état de notre système
      break;

  }
}

void simpleclick2()
{
  switch (etatCourant2) {
    case REPOS: // on allume la rouge
    
      digitalWrite(pinLedRouge, HIGH); // LED rouge alluméee
      digitalWrite(pinLedVerte, LOW);
      digitalWrite(pinLedJaune, LOW);
      etatCourant2 = ETAT_R; // on note le nouvel état de notre système
      break;

   
  }
}

void simpleclick3()
{
  switch (etatCourant3) {
    case REPOS: //  on allume la jaune
    
      digitalWrite(pinLedJaune, LOW); // LED jaune allumee
      digitalWrite(pinLedRouge, LOW);
      digitalWrite(pinLedVerte, LOW);
      etatCourant3 = ETAT_R; // on note le nouvel état de notre système
      break;

  }
}



// ------------------------------------------------------
// On initialise notre système dans le setup
// ------------------------------------------------------
void setup() {
 
  pinMode(pinLedVerte, OUTPUT);
  pinMode(pinLedRouge, OUTPUT);
  pinMode(pinLedJaune, OUTPUT);

  
  mettreAuRepos();
  button1.attachClick(simpleclick1);
  button2.attachClick(simpleclick2);
  button3.attachClick(simpleclick3);

}

void loop()
{
  button1.tick();
  button2.tick();
  button3.tick();

}
[/code]

Quelqu'un peut-il m'aider ?
merci d'avance

Bonjour,

Tu n'as qu'un seul état puisque quelle que soit la led allumée un bouton fait toujours la même chose.
Donc ça simplifie le programme.

void simpleclick1()
{
      digitalWrite(pinLedVerte, HIGH); // LED rouge ETEINTE, JAUNE eteinte
      digitalWrite(pinLedRouge, LOW);
      digitalWrite(pinLedJaune, LOW);
}

Idem pour les autres boutons.

merci pour cette réponse rapide mais si je comprends bien je doit supprimer tous les switchs ?

oui

Ok je vais essayer cela
Merci encore pour ton aide

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.