Interrupteur pour augmenter et diminuer une variable

Bonjour, je suis sur un projet en ce moment pour lequel quand je clique sur un bouton "plus", mon afficheur 7 segments augmente de un chiffre, et à l'inverse quand je clique sur un bouton "moins" il diminue de un chiffre (cela va de 0 à 9 max) et je bloque sur quelque chose :

Augmenter et diminuer de 1 une variable à chaque fois que j'appuie sur le bouton 1 (augmenter la variable de 1) ou le bouton 2 (diminuer la variable de 1).

J'ai déjà cherché sur des forums notamment celui ci qui répond assez bien à ce que je demande sauf que quand je me met en "INPUT_PULLUP" au lieu de "INPUT" le programme ne marche plus, il ne m'affiche rien dans le moniteur série... :face_with_raised_eyebrow:
Est ce que quelqu'un saurait m'aider ?
Voilà mon code si dessous, j'ai enlevé la partie avec l'afficheur 7 segment car il fonctionne pour le moment.

float variableNombre = 1; // variable qui sera associée au chiffre sur l'afficheur 7 segments
int pinBouton1 = 11; // Bouton poussoir 1 branché en pullup sur le pin 2
int pinBouton2 = 12; // Bouton poussoir 2 branché en pullup sur le pin 3



void setup ()
{

  //définition des modes
  pinMode(pinBouton1, INPUT_PULLUP);
  pinMode(pinBouton2, INPUT_PULLUP);
  Serial.begin(9600);



}

void loop()
{

 //lecture de l'état du bouton et stockage dans etatBouton
  boolean etatBouton1 = digitalRead(pinBouton1);
  boolean etatBouton2 = digitalRead(pinBouton2);
  //test des conditions
if (etatBouton1 == LOW) //test si bouton 1 appuyé
  {
    variableNombre = variableNombre + 1;
    Serial.print("variableNombre : ");
    Serial.println(variableNombre,2);
    delay(1000);
  }
  if (etatBouton2 == LOW) //test si bouton 2 appuyé
  {
    variableNombre = variableNombre - 1;
    Serial.print(variableNombre : ");
    Serial.println(variableNombre,2);
    delay(1000);
  }

}```

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Comment sont câblés les boutons?

Le bouton 1 sur la broche 11 et le 5v et le bouton 2 sur la broche 12 et le 5volts

Oui mais pour fonctionner avec INPUT_PULLUP, il faut que le bouton soit entre une pin d'entrée et le GND.

Si tu places le bouton entre une pin et le +5V, il faut un pulldown entre la pin et le GND mais là, il faut placer une résistance à l'extérieur.

Ah d'accord ça doit être ça !
J'essaye dès demain pour voir :+1:

C'est bon c'était juste ca merci !! Et moi qui essayait de remodifier mon code dans tous les sens alors qu'il était bon ...

Bonjour @raxakus,

J'ai modifié votre logiciel un peu pour qu'il fonctionne sans délai... Il est plus réactif et n'agit que sur un passage de LOW à HIGH... Et la fonction inclut l'anti-rebond du bouton:

float variableNombre = 1; // variable qui sera associée au chiffre sur l'afficheur 7 segments
int pinBouton1 = 11; // Bouton poussoir 1 branché en pullup sur le pin 2
int pinBouton2 = 12; // Bouton poussoir 2 branché en pullup sur le pin 3

void setup ()
{
  //définition des modes
  pinMode(pinBouton1, INPUT_PULLUP);
  pinMode(pinBouton2, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop()
{

  //test des conditions
if (Bouton1Relache()) //test si bouton 1 appuyé
  {
    variableNombre = variableNombre + 1;
    Serial.print("variableNombre : ");
    Serial.println(variableNombre,2);
  }
  if (Bouton2Relache()) //test si bouton 2 appuyé
  {
    variableNombre = variableNombre - 1;
    Serial.print("variableNombre : ");
    Serial.println(variableNombre,2);
  }
}

boolean Bouton1Relache(){
  static byte etatAncien = HIGH;
  static unsigned long temp;
  static byte unefois = false;
  byte etat = digitalRead(pinBouton1);
  if (etatAncien != etat) temp = millis();
  if (millis() - temp > 30) {
     if (!etat) unefois = true;
    }
  etatAncien = etat;  
  if (unefois && etat)  {
     unefois = false;
     return true;
  }
  return false;
}

boolean Bouton2Relache(){
  static byte etatAncien = HIGH;
  static unsigned long temp;
  static byte unefois = false;
  byte etat = digitalRead(pinBouton2);
  if (etatAncien != etat) temp = millis();
  if (millis() - temp > 30) {
     if (!etat) unefois = true;
    }
  etatAncien = etat;  
  if (unefois && etat)  {
     unefois = false;
     return true;
  }
  return false;
}


C'est bien sûr à vous de décider si vous souhaitez accepter le changement ou non. Vous pouvez tester la fonction sur Wokwi:

https://wokwi.com/projects/333717845317780051

:wink:

Ç'est le circuit simple avec les boutons:

image

Bonjour, Désolé je n'avais pas vu ton message!
Merci de m'avoir réercrit mon code, c'est super mais je ne vois aucun probleme dans le mien (depuis que j'ai changé la place de mon interrupteur) donc je vais plutot garder le mien merci :grin: :+1:

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