bouton poussoir

Bonjour à tous et à toutes,

J'ai un soucis pour un projet,

Voila ce que j'aimerais faire :

  • 2 boutons poussoirs
  • 1 led

J'appui sur le BP1 (sans relâcher), la LED s'allume (peut importe si je relache ou pas)
J'appui sur le BP2 (en relâchant), la LED s'éteint

Apr!s avoir lu plusieurs topic, si j'ai bien compris il faudrait:

  • que je lise l'état des BP, que le jes compare à leur état précedent pour voir l'enfoncement ou pas, puis que j'incrémente un compteur.
    Par exemple : BP1 : +2
    BP2 : -1
    Si ca fait +1 : la LED s'allume

Cela fonctionnerait? Merci de votre aide précieuse !!

bonjour,
la fonction boolean peut faire ca.

C'est la LED de quoi qui s'allume ?

Tu ne crois pas qu'un petit schéma sur une feuille de papier aiderai ?

Parce que pour le moment à part ça ? ? ?
boule_de_cristal.jpg

Mais cela ne fonctionne pas bien.

boule_de_cristal.jpg

J'appui sur le BP1 (sans relâcher), la LED s'allume (peut importe si je relache ou pas)

--> faudrait savoir sans relâcher ou pas?

ce que vous voulez dire c'est dès l'appui vous voulez allumer une led sans attendre le relâchement du bouton c'est cela? et ensuite l'autre bouton lui ne doit réagir pour éteindre une LED non pas à l'enfoncement mais à son relâchement ?

voila l'image vite faite :

je compte allumer la led 13 pour les tests :slight_smile:

Bonjour,

clemraym:
voila l'image vite faite :

Dommage la qualité n'est pas top :wink:

pas d'image :frowning:

Re,

J-M-L:
pas d'image :frowning:

:grin:

voila l'image de ce site : http://www.wikidebrouillard.org/index.php?title=Horloge_Arduino

Désolé j'ai du mal...

Pour ton information les entrées "improprement" appelées analogiques par Arduino sont par défaut à l'allumage du micro de véritables entrées numériques.

Ce n'est qu'en appelant la fonction analogRead (qui va modifier la valeur de quelques registres du micro) qu'elles peuvent faire des mesures de tension analogique.

Je te dis cela car tu peut très bien utiliser les entrées A0 et A1 ce qui simplifiera le câblage.
Autre solution il y a aussi un Gnd de disponible sur le connecteur du haut.
Toujours chercher à faire un câblage simple en évitant de croiser les fils dans la mesure du possible.

J'ai fais ce code mais j'en doute un peu ..

int  bouton1 = 2;
Int bouton 2 = 3;     
int led = 13; 


int compteur = 0;
int etatBouton1 = 0;   
Int etatBouton2 = 0;      
int dernierEtatBouton1 = 0;
int dernierEtatBouton2 = 0; 

void setup() {

  pinMode(bouton1, INPUT);
  pinMode(bouton2, INPUT);
  pinMode(led, OUTPUT);
  
}


void loop() {

etatBouton1 = digitalRead(bouton1);
etatBouton2 = digitalRead(bouton2);

  if (etatBouton1 != dernierEtatBouton1 {
  if (etatBouton1 == HIGH) {
    
      compteur++;

  if (etatBouton2 != dernierEtatBouton2 {
  if (etatBouton2 == HIGH) {

 compteur - -;


 
  if (compteur == 0) { 
    digitalWrite(led, HIGH); 
  } else { 
   digitalWrite(led, LOW);   }
}

Bonjour,
Quid de la modification des variables dernierEtatBouton1 et dernierEtatBouton2 ?

Je crois qu'il doit y avoir bien plu ssimple que ce que j'ai fais...
Je veux juste :
Appui sans relacher sur BP1 : allume LED
Appui sans relacher sur BP2 : éteint led

Les boolean sont ils plus simple?

Manque une parenthèse ici avant l'accolade.... (pas lu le reste mais je vous conseille de vérifier les différents blocs)

 if (etatBouton1 != dernierEtatBouton1 {

Bonjour,

  • il faut corriger les erreurs de compilation dans ton programme
  • il faut mettre à jour les variables dernierEtatBouton1 et dernierEtatBouton2, comme indiqué par icare
  • ton compteur ne sert à rien, il suffit de faire l'action directement

Ca donne un programme de ce genre

int  bouton1 = 2;
int bouton2 = 3;
int led = 13;


int compteur = 0;
int etatBouton1 = 0;
int etatBouton2 = 0;
int dernierEtatBouton1 = 0;
int dernierEtatBouton2 = 0;

void setup() {

  pinMode(bouton1, INPUT);
  pinMode(bouton2, INPUT);
  pinMode(led, OUTPUT);

}


void loop() {
  etatBouton1 = digitalRead(bouton1);
  etatBouton2 = digitalRead(bouton2);

  if (etatBouton1 != dernierEtatBouton1) {
    if (etatBouton1 == HIGH) {
      digitalWrite(led, HIGH);
    }
    dernierEtatBouton1 = etatBouton1;
  }

  if (etatBouton2 != dernierEtatBouton2) {
    if (etatBouton2 == HIGH) {
      digitalWrite(led, LOW);
    }
    dernierEtatBouton2 = etatBouton2;
  }
}

Re,

clemraym:
Je crois qu'il doit y avoir bien plu ssimple que ce que j'ai fais...
Je veux juste :
Appui sans relacher sur BP1 : allume LED
Appui sans relacher sur BP2 : éteint led

Avec ce que tu veux faire le BP1 suffit et, pire, même pas besoin d'une carte Arduino (une pile + un BP + une résistance + une led)

clemraym:
Les boolean sont ils plus simple?

Rien n'est simple et rien n'est compliqué. Tout dépend de la structure de ton programme.
Il faut être plus clair dans ce que tu veux faire.

Genial merci beaucoup de vos réponse ca fonctionne à merveille !!!