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();
}
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
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 !
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.
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.
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).
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 ?
@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)