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;
}
}