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...
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);
}
}```
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:
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