Compteur + afficheur LCD + Bouton

Bonjour,
Je me permets de lancer un topic car je cherche à afficher sur un écran lcd un compteur par bouton poussoir. J’ai deux boutons poussoir et je cherche à afficher l’incrémentation et la décrémentation en appuyant sur le bouton plus ou le bouton moins donc + ou -1. Arriver à la valeur zero dans les deux cas on ne peut plus incrémenter ni décrémenter. Mon soucis dans mon code est que la valeur affichée clignote par rapport à la valeur précédente, la valeur n’est pas figée. je ne vois donc pas l’effet des mes boutons sur le compteur.
Voici mon code :

#include <LiquidCrystal.h>
//const int Pin_p= 8;
//const int Pin_m= 9;

int Pin_plus=0;
int Pin_moins=0;
int j=0;

LiquidCrystal lcd(7,6,5,4,3,2);

void setup() {
 
  lcd.begin(20, 4);
  
  pinMode(11,INPUT);
  pinMode(12,INPUT);
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  j=0;
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print(j);
  lcd.clear();
  //lcd.print(j);
 
}

void loop() {
  if (digitalRead(11)==LOW)
  {
    j++;
    lcd.setCursor(0,1);
    lcd.print(j);
    delay(100);
    lcd.clear();
  }
  if (digitalRead(12)==LOW)
  {
    j--;
    lcd.setCursor(0,1);
    lcd.print(j);
    delay(100);
    lcd.clear();
   
    
  }
  delay(10);
//lcd.clear();
}

Merci d’avance pour vos réponses

Tu fais un clear de l’afficheur après chaque écriture pas étonnant qu’il clignote.
Tu ne testes pas tes bornes de fin donc tu devrais continuer à compter/décompter lorsque tu arriveras au maximum/minimum.
Avant de sortir des if il faudrait vérifier que le bouton a été relâché sinon tu vas compter plusieurs impulsions pour un appui.

// définition des bornes 
#define valeurMin 0
#define valeurMax 32767
if (digitalRead(11)==LOW)
  {
    if (j<valeurMax) j++;
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print(j);
    delay(100);
    while((digitalRead(11)==LOW));
  }
  if (digitalRead(12)==LOW)
  {
    if (j>valeurMin) j--;
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print(j);
    delay(100);
    while((digitalRead(12)==LOW));
}

D’accord merci beaucoup pour ton aide,
Par ctre dans ton programme, je ne peux qu’aller de 0 à 1 et de 1 à 0 est-ce normal?

#include <LiquidCrystal.h>
//const int Pin_p= 8;
//const int Pin_m= 9;
// définition des bornes 
#define valeurMin 0
#define valeurMax 10

int Pin_plus=0;
int Pin_moins=0;
int j=0;

LiquidCrystal lcd(7,6,5,4,3,2);

void setup() {
 
  lcd.begin(20, 4);
  
  pinMode(11,INPUT);
  pinMode(12,INPUT);
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  j=0;
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print(j);
  lcd.clear();
  //lcd.print(j);
 //delay(100);
}

void loop() {
  if (digitalRead(11)==LOW)
  {
    if (j<valeurMax)j++;

    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print(j);
    delay(100);
    while((digitalRead(11)==LOW));
  }
  if (digitalRead(12)==LOW)
  {
    if (j>valeurMin)j--;
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print(j);
    delay(100);
    while((digitalRead(12)==LOW));
}
}

Avec ce code il faut maintenir un bouton et incrémenter avec l’autre bouton et vice versa maintenir l’autre bouton pour décrémenter avec l’autre bouton

Par ctre dans ton programme, je ne peux qu'aller de 0 à 1 et de 1 à 0 est-ce normal?

Tout me semble correct. Il devrait avancer de 1 (ou -1) à chaque appui sur l'un des boutons.

Beh je dois maintenir un bouton pour incrémenter avec l'autre bouton et vice versa

Je ne vois pas pourquoi.
Pour moi:
un appui sur le bouton connecté à la broche 11 avance le compte de 1
un appui sur le bouton connecté à la broche 12 réduit le compte de 1
Il faut que le bouton soit relâché pour sortir du if. Si tu tiens le bouton enfoncé le compte ne change pas.

Bah je t'assure que si C'est exactement ca que je cherche à faire mais la je suis obligé de maintenir le bouton 11 et appuyer sur 12 pour augmenter ou bien maintenir 12 et appuyer sur 11 pour décrémenter

J’ai testé et le programme fonctionne parfaitement comme attendu.

Je pense que tu dois avoir des interrupteurs fermés au repos.
Le programme devrait fonctionner si tu changes dans loop les LOW par des HIGH pour les 2 if et les 2 while

Oui c’est exactement ça !
J’ai changé les LOW par des HIGH et ça fonctionne pourtant j’avais bien déclaré les bouton en HIGH dans setup
Merci beaucoup pour ton aide !

Bonjour.

mika47: pourtant j'avais bien déclaré les bouton en HIGH dans setup

Tu n'avais pas "déclaré" les boutons en HIGH. digitalWrite() va activer (HIGH) ou désactiver (LOW) une broche. digitalRead() va renvoyer HIGH s'il y a de la tension entre pin et GND et LOW s'il n'y en a pas. Si tu avais mis digitalWrite(pin, LOW) alors de toutes façons il n'y aurai pas de tension car la broche serai désactivée et non car elle serait déclarée comme LOW.

Merci beaucoup pour vos réponses, J'ai mis en place un troisième Bouton poussoir et quand on appui dessus il enregistre la valeur choisie avec les deux boutons précédents et j'affiche cette valeur. Pour éviter de réafficher les valeurs sur mon LCD, comment fait-on pour désactiver les deux premiers boutons poussoirs lorsque j'appui sur le troisième, comme çà si j'appui sur le BP 1 ou BP 2 il ne se passera rien.

Merci d'avance,

bonjour impossible de configuré le branchement du lcd il affiche rien quelle sont les numeros de pin associer au lcd svp

j'utilise un lcd 1602a un standard arduino

mika47: Merci beaucoup pour vos réponses, J'ai mis en place un troisième Bouton poussoir et quand on appui dessus il enregistre la valeur choisie avec les deux boutons précédents et j'affiche cette valeur. Pour éviter de réafficher les valeurs sur mon LCD, comment fait-on pour désactiver les deux premiers boutons poussoirs lorsque j'appui sur le troisième, comme çà si j'appui sur le BP 1 ou BP 2 il ne se passera rien.

Merci d'avance,

Poste ton code actuel, STP. Pour ta question, je pense qu'il ne faut pas désactiver les BP1 et BP2, mais juste éviter de les lire.

@Corsairg : crée un nouveau fil de discussion avec ton propre problème

Hihi Réponse à un post de 2012, c'est ce qui s'appelle se faire avoir :)

Et pour le premier post du jour, je me dis qu'il y a vraiment urgence à ce que les correcteurs d'orthographe intégrés aux dispositifs de saisie, intègrent les règles grammaticales de base sur l'usage des verbes à l'infinitif ou au participe passé. Ce n'est quand même pas très compliqué à programmer (ni à apprendre d'ailleurs, mais encore faudrait-il daigner y accorder un minimum d'attention).

Damned !

bonjour
j’ai modifier le tout
cela fontionne, j’ai rajouté un reset
voici le fichier
comptage 9
décomptage 8
reset 13

comp_decon_v2 2_jun08c.ino (1.03 KB)

Bonjour,

Ce sujet m'interesse, je recherche a faire la meme chose mais avec envoi de la valeur du compteur sur une page web et non sur le LCD.... pourriez-vous m'indiquer comment modifier le code ?

MErci à vous

@rer67: tu devrais faire un nouveau sujet pour décrire ton problème, ton matériel, ton objectif, et poster un debut de code, si possible entre balises CODE (voir messages épinglés en haut du forum)