Répondre à une question avec arduino

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Je cherche à faire un programme du type le juste prix sur arduino avec un écran lcd et 3 boutons (un pour dire plus, un pour moins et un dernier pour oui). Ma question est de savoir comment faire pour que le programme attende une réponse (via un appui sur un bouton) après avoir inscrit une question à l'écran ?

Merci d'avance

+0 -0
Auteur du sujet

C'est ce que j'ai fais mais si j'ai bien compris pour attachInterrupt on ne peut l'utiliser que sur deux boutons ? Seulement j'en ai trois pour mon programme et pour interrupts je n'ai pas compris le fonctionnement

+0 -0

Sinon si le programme doit attendre un bouton sans rien faire tu peux faire un truc comme :

1
2
3
4
5
6
7
8
// boucle d'attente bloquante d'un bouton
do {
   btn_plus = digitalRead(bouton_plus);
   btn_moins = digitalRead(btn_moins);
   btn_ok = digitalRead(btn_ok);
}while(!(btn_plus || btn_moins || btn_ok));

// [...] traitement en fonction des boutons

Si tu veux juste attendre le bouton sur OK :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// boucle d'attente bloquante d'un bouton
do {
   btn_plus = digitalRead(bouton_plus);
   btn_moins = digitalRead(btn_moins);
   btn_ok = digitalRead(btn_ok);

   if(btn_plus)
      prix++;
   if(btn_moins)
      prix--;
}while(!btn_ok);

// [...] traitement en fonction des boutons

(prévoir une détection de front pour éviter d'additionner a gogo)

ZdS, le best du Zeste ! Tuto Arduino, blog, etc

+0 -0
Auteur du sujet

Alors j'ai essayé la première boucle, le programme attend effectivement bien que j'appui sur un bouton par contre on dirait que la question est écrite deux fois sur l'écran (en tout cas le début à la suite de ce qu'il y avait déjà d'affiché) et lorsque j'arrive dans mes fonctions de valeur sup ou inf, la valeur retournée n'est plus la moitié de la tranche restante et le programme est ensuite bloqué quelque soit mes appuis sur les boutons…

Sinon voilà ce que j'avais tenté pour attendre un appui sur un bouton

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void loop()
{
    question();//fonction pour poser la question
    while(x == -1)
    {
        etatG = digitalRead(boutonG);
        etatM = digitalRead(boutonM);
        etatD = digitalRead(boutonD);
        if(etatD == LOW)//si la valeur est supérieure...
        {
            x = 0;
            valeursup();//...alors fonction valeursup
        }
        if(etatM == LOW)//si c'est la bonne valeur...
        {
            x = 0;
            bravo();//...alors bravo
        }
        if(etatG == LOW)//si la valeur est inférieure...
        {
            x = 0;
            valeurinf();//...alors fonction valeurinf
        }
    }
}

edit : idem avec la deuxième boucle

Édité par Bidou914

+0 -0

x vaut combien avant le demarrage ?

Et sinon je me cite :

(prévoir une détection de front pour éviter d'additionner a gogo)

La en l’occurrence il y a de très forte chance que ton programme exécute plusieurs fois un des différents le temps que tu appuis sur le bouton puis le relache

ZdS, le best du Zeste ! Tuto Arduino, blog, etc

+0 -0
Auteur du sujet

C'est bon ! Avec les détections de front mises au bon endroit dans le programme et grâce à la première boucle do/while, tout fonctionne !

Merci encore

edit : rectification le programme fonctionne bien par contre ma question s'affiche correctement la première fois : Est-ce 500 ? MOINS OUI PLUS

Puis les fois suivantes elle s'affiche une nouvelle fois en bout: Est-ce 500 ? MOINS OUI PLUSEs

J'ai donc encore du travail mais c'est fonctionnel

Édité par Bidou914

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte