Go Down

Topic: Compteur + afficheur LCD + Bouton (Read 4 times) previous topic - next topic

mika47

Dec 17, 2012, 11:08 am Last Edit: Dec 17, 2012, 11:11 am by mika47 Reason: 1
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: [Select]
#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

fdufnews

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: [Select]


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

mika47

#2
Dec 17, 2012, 11:39 am Last Edit: Dec 17, 2012, 12:46 pm by mika47 Reason: 1
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: [Select]
#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

fdufnews

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.

mika47

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

fdufnews

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.

mika47

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

fdufnews

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

mika47

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 !

numero_744

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.
- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (po

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,

Go Up