Pages: [1]   Go Down
Author Topic: Compteur + afficheur LCD + Bouton  (Read 3784 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 65
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :

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
« Last Edit: December 17, 2012, 05:11:23 am by mika47 » Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3624
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Code:

// 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));
}
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 65
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Code:
#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
« Last Edit: December 17, 2012, 06:46:57 am by mika47 » Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3624
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 65
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3624
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 65
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3624
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 65
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !
Logged

France, Lyon 6°
Offline Offline
Full Member
***
Karma: 0
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour.

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.
Logged

- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (po

Offline Offline
Jr. Member
**
Karma: 0
Posts: 65
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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,
Logged

Pages: [1]   Go Up
Jump to: