Compteur front montant affichage LCD

Bonjour

je débute en programmation C , et je voudrais pour un projet faire un programme qui incrémente un compteur sur un écran LCD.

Quand j'enfonce le bouton , le score augmente bien de 5000 mais quand je relâche le bouton le score augmente encore de 5000 ( soit en tout 10000).

j'ai beau tout essayer je n'y arrive pas et c'est pour ça que je me permet de vous sollicité j'y est passé beaucoup de temps pour rien.

si vous avez une solution, je suis très intéressé.

merci d' avance
Fred


#include <LiquidCrystal.h>

long int score = 0;


const int button5Pin = 5;  //on initialise le pin de mesure des impulsions
int etat_gbf = 0;  //on mesurera l'état du haut ou bas du signal gbf
int last_etat_gbf = 0;  //pour garder en mémoire l'ancien état du gbf
int etat=0;



LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup(){

 lcd.begin(16, 2);
   lcd.print("       JOUEUR A");

  pinMode(button5Pin, INPUT); //on met le pin entree impulsion en lecture
  
  Serial.begin(9600); //initialiser la communication serie
}

void loop()
{
  lcd.setCursor(1, 1);
  
  
 Serial.println(etat);
  lcd.print(score); //affichage d'un 0 
  {
        etat_gbf = digitalRead(button5Pin); //lecture de l'état du gbf
  
    if (etat_gbf != last_etat_gbf) //en cas de changement de l'état du gbf
    
      score  = score + 5000 ; // on incrémente le compteur
       
      
   ( last_etat_gbf = etat_gbf );
   
   if (etat_gbf != last_etat_gbf)

   score  = score;
      
  }
while (etat==1);
 
 }

hello
ton prg fait ce que tu lui demandes
un appui sur le BP, passage de LOW à HIGH
un relâchement du BP, passage de HIGH à LOW

voici ton prg revu et commenté

#include <LiquidCrystal.h>
long int score = 0;
const int button5Pin = 5;  //on initialise le pin de mesure des impulsions
int etat_gbf = 0;  //on mesurera l'état du haut ou bas du signal gbf
int last_etat_gbf = etat_gbf;  //pour garder en mémoire l'ancien état du gbf
int etat = 0;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void setup() 
{
  lcd.begin(16, 2);
  lcd.print("       JOUEUR A"); //il aurait été interressant de savoir comment est cablé le bouton poussoir
  pinMode(button5Pin, INPUT); //il faut peut etre un INPUT_PULLUP
  Serial.begin(115200); //initialiser la communication serie. on peut monter à 115200 sans problème
}

void loop()
{
  Serial.println(etat);
  lcd.setCursor(1, 1);
  lcd.print(score); //affichage du score
  etat_gbf = digitalRead(button5Pin); //lecture de l'état du gbf

  if (etat_gbf != last_etat_gbf) //à chaque changement d'état du bouton 5 le score s'incrémente de 5000
  {
    score  = score + 5000 ;      //appui =passage de 1 à 0 et relachement, passage de 0 à 1. donc, tu changes deux fois d'état.
    last_etat_gbf = etat_gbf;
    if (etat_gbf != last_etat_gbf) //ne sert à rien, voir la ligne précédente
    score  = score;              //oui, c'est vrai et ne sert à rien
  }
  while (etat == 1);               // etat est = 0 et tu ne le mets jamais à 1, donc cette ligne ne sert à rien
}

celui ci devrait faire ce que tu veux, à condition que ton BP soit cablé pour amener le GND lorsque tu appuies dessus.

#include <LiquidCrystal.h>
long int score = 0;
const int button5Pin = 5;  //on initialise le pin de mesure des impulsions
int etat_gbf = 0;  //on mesurera l'état du haut ou bas du signal gbf
int last_etat_gbf = etat_gbf;  //pour garder en mémoire l'ancien état du gbf
int etat = 0;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void setup() 
{
  lcd.begin(16, 2);
  lcd.print("       JOUEUR A"); //il aurait été interressant de savoir comment est cablé le bouton poussoir
  pinMode(button5Pin, INPUT_PULLUP); //il faut peut etre un INPUT_PULLUP
  Serial.begin(115200); //initialiser la communication serie. on peut monter à 115200 sans problème
}

void loop()
{
  Serial.println(score);
  lcd.setCursor(1, 1);
  lcd.print(score); //affichage du score
  etat_gbf = digitalRead(button5Pin); //lecture de l'état du gbf
if((etat_gbf==LOW)&&(etat_gbf != last_etat_gbf)) //si bouton poussoir appuyé ( donc lecture de LOW ) et létat précédent était HIGH
  {
    score  = score + 5000 ;   
    last_etat_gbf = etat_gbf;
  }
  else
  {
    last_etat_gbf = etat_gbf;
  }
}

c'est un compteur de fronts descendants.
je te laisse faire les modifs pour qu'il compte le fronts montants.

Comme dans les deux cas on fait last_etat_gbf = etat_gbf;, on peut le sortir du if. Cela devient:

Bonsoir

Merci beaucoup !
je n'aurai pas trouvé tout seul.
Ca fonctionne parfaitement ( j 'ai placé le bouton en GND)

Merci !!!!

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