Arduino afficheur

a marqué ce sujet comme résolu.

Bonsoir, Dans le cadre d’un projet, j’aimerais réaliser un algorithme Arduino. En effet, je souhaiterais faire apparaître sur un afficheur LCD, au milieu de ce dernier, le mot TEMPERATURE?. Pour cela, je n’ai pas trop de difficulté. Par contre, à l’aide de 4 "boutons", je souhaiterais faire apparaître un choix. 60°C? 70°C? 80°C? et 95°C? Selon l’option choisie, d’autres options s’affichent, avec d’abord "VOLUME?" écrit au centre, et 4 propositions : 0,5L? 0,8L? 1L? Retour en arrière. Ensuite, selon CE choix et LE PRECEDENT, un décompte de temps s’afficherait, de X min Y s à 0 min 0 sec. Pourriez-vous m’aider dans le choix des fonctions ? Car cet algorithme me parait un peu compliqué… Merci d’avance.

Il n’est pas très compliqué, c’est un bon exercice qui te permettra d’apprendre des choses si tu le fais toi-même.

Commence par quelque chose de plus simple. Une diode, et un petit menu avec deux choix : ALLUMER / ETEINDRE. Et n’hésite pas à poster ton code si tu n’arrives pas à le faire marcher.

+0 -0

D’accord, merci de votre réponse. Savez-vous quelle fonction je dois utiliser pour cela ? Car je suis un réel débutant Arduino (je pense pouvoir y arriver si je trouve la bonne fonction). Merci !
/*

*/

     void setup() {
pinMode(A; INPUT);
pinMode(B; INPUT);
pinMode(C; OUTPUT);
lcd.begin(16;2);

}

 =void loop() {
lcd.setCursor(2;3);
lcd.print("MARCHE");
lcd.setCursor(2;10);
lcd.print("ARRET");

} Je ne sais que faire d’autre…

+0 -0

Merci de votre réponse, mais je n’y arrive vraiment pas. Le téléversement ne se fait pas. De plus, je dois le finir pour demain… pourriez vous m’indiquer le nom de la fonction permettant de faire le choix ? Je vous envoie celui que j’ai fait pour le moment.

D’accord… Bon voici ce que j’ai fait, et ça ne marche déjà pas :

#include <LiquidCrystal.h>;
  LiquidCrystal lcd(12,11,5,4,3,2);
   const int BOUTON_1 = 8;
   const int BOUTON_2 = 7;
   const int BOUTON_3 = 6;
   const int BOUTON_2 = 5;
   const int LED = 4;


   void setup () {
lcd.begin(16;2);
pinMode(LED; OUTPUT);
pinMode(BOUTON_1; INPUT);
pinMode(BOUTON_2; INPUT);
pinMode(BOUTON_3; INPUT);
pinMode(BOUTON_4; INPUT);
}

   void loop () {
lcd.setCursor(1;1);
lcd.print(« TEMPÉRATURE? »);
lcd.setCursor(2;2);
lcd.print(« 60 »);
lcd.setCursor(2;6);
lcd.print(« 70 »);
lcd.setCursor(2;10);
lcd.print(« 80 »);
lcd.setCursor(2;14);
lcd.print(« 95 »);

} Voilà, et déjà ici ça ne fonctionne pas. Je ne sais pas comment inclure une fonction « si BOUTON 1 appuyé, faire … », puisque je ne m’y connais pas en Arduino. Merci d’avance

Je vais l’envoyer maintenant depuis un ordinateur. Le début s’affiche parfaitement (Température? et 60, 70, 80, 95, s’affichent) mais la fonction que j’ai créée pour afficher VOLUME? ne fonctionne pas… lorsque je clique sur le bouton, rien ne se passe… Sinon merci beaucoup pour vos conseils!

        #include <Wire.h>
        #include "rgb_lcd.h"
  rgb_lcd lcd;

const int colorR = 0;
const int colorG = 0;
const int colorB = 255;
const int BOUTON_1 = 8;
const int BOUTON_2 = 7;
const int BOUTON_3 = 6;
const int BOUTON_4 = 5;
const int LED = 4;
int etat1;
int etat2;
int etat3;
int etat4;

void setup() {

lcd.begin(16, 2);
lcd.setRGB(colorR, colorG, colorB);
pinMode(LED, OUTPUT);
pinMode(BOUTON_1, INPUT);
pinMode(BOUTON_2, INPUT);
pinMode(BOUTON_3, INPUT);
pinMode(BOUTON_4, INPUT);
etat1 = LOW;
etat2 = LOW;
etat3 = LOW;
etat4 = LOW;
}

void loop() {

lcd.setCursor(0, 0);
  lcd.print("TEMPERATURE?");
lcd.setCursor(1, 1);
  lcd.print("60");
lcd.setCursor(5, 1);
  lcd.print("70");
lcd.setCursor(9, 1);
  lcd.print("80");
lcd.setCursor(13, 1);
  lcd.print("95");
delay(200);
etat1 = digitalRead(BOUTON_1);
etat2 = digitalRead(BOUTON_2);
etat3 = digitalRead(BOUTON_3);
etat4 = digitalRead(BOUTON_4);
if (etat1 == HIGH)
{
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("VOLUME?");
}
else 
{
  lcd.print("");
}
}

La fonction loop() étant - comme son nom l’indique - appelée en boucle, elle s’exécute un grand nombre de fois par seconde. Ca dépend de ce qu’on y fait, mais c’est des centaines ou des milliers.

Ca veut dire que quand on s’aperçoit qu’un bouton est enfoncé, il faut attendre un peu avant de le prendre en compte une autre fois.

Il y a plusieurs solutions

  • la méthode de goret consistant à appeler delay()
  • noter l’heure qu’il est, grâce à millis(), et ne pas tenir compte du bouton avant un certain temps.
+0 -0

Merci beaucoup. J’ai presque réussi et enfin terminé. Je dois finalement le terminer pour vendredi, ce qui me laisse le temps. Je vous envoie le nouveau ce soir, qui affiche température et apres avoir appuyé sur n’importe quel des 4 boutons, affiche Volume. Je n’arrive juste pas à enregistrer le choix fait et à faire à partir de là le décompte de X min à 0 min.

    #include <Wire.h>
    #include "rgb_lcd.h"

  int Ctr_sec;
   rgb_lcd lcd;

const int colorR = 0;
const int colorG = 0;
const int colorB = 255;
const int BOUTON_1 = 8;
const int BOUTON_2 = 7;
const int BOUTON_3 = 6;
const int BOUTON_4 = 5;
const int LED = 4;
int etat1;
int etat2;
int etat3;
int etat4;

  void setup() {

   lcd.begin(16, 2);
  lcd.setRGB(colorR, colorG, colorB);

 pinMode(LED, OUTPUT);
 pinMode(BOUTON_1, INPUT);
 pinMode(BOUTON_2, INPUT);
 pinMode(BOUTON_3, INPUT);
 pinMode(BOUTON_4, INPUT);
 etat1 = LOW;
 etat2 = LOW;
 etat3 = LOW;
 etat4 = LOW;
 }

void loop() {

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TEMPERATURE?");
lcd.setCursor(1, 1);
lcd.print("60");
lcd.setCursor(5, 1);
lcd.print("70");
lcd.setCursor(9, 1);
lcd.print("80");
lcd.setCursor(13, 1);
lcd.print("95");

   delay(20);
  etat1 = digitalRead(BOUTON_1);
  etat2 = digitalRead(BOUTON_2);
  etat3 = digitalRead(BOUTON_3);
  etat4 = digitalRead(BOUTON_4);
 if (etat1 == HIGH)
{
  etat1 == LOW;
   lcd.clear();
   lcd.setCursor(0, 0);
    lcd.print(« VOLUME? »);
    lcd.setCursor(0, 1);
    lcd.print(« 0,5 »);
    lcd.setCursor(4, 1);
    lcd.print(« 0,8 »);
    lcd.setCursor(9, 1);
    lcd.print(« 1 »);
    lcd.setCursor(12, 1);
    lcd.print(« BACK »);
    delay(20000);
  }
  if (etat2 == HIGH)
  {
 etat2 == LOW;
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(« VOLUME? »);
 lcd.setCursor(0, 1);
 lcd.print(« 0,5 »);
 lcd.setCursor(4, 1);
 lcd.print(« 0,8 »);
 lcd.setCursor(9, 1);
 lcd.print(« 1 »);
 lcd.setCursor(12, 1);
 lcd.print(« BACK »);
 delay(20000);
 }
   if (etat3 == HIGH)
 {
 etat3 == LOW;
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(« VOLUME? »);
 lcd.setCursor(0, 1);
 lcd.print(« 0,5 »);
 lcd.setCursor(4, 1);
 lcd.print(« 0,8 »);
 lcd.setCursor(9, 1);
 lcd.print(« 1 »);
 lcd.setCursor(12, 1);
 lcd.print(« BACK »);
 delay(20000);
  }
  if (etat4 == HIGH)
  {
 etat4 == LOW;
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(« VOLUME? »);
 lcd.setCursor(0, 1);
 lcd.print(« 0,5 »);
 lcd.setCursor(4, 1);
 lcd.print(« 0,8 »);
 lcd.setCursor(9, 1);
 lcd.print(« 1 »);
 lcd.setCursor(12, 1);
 lcd.print(« BACK »);
 delay(20000);
  }  
  }

Voilà ce que j’ai pour l’instant. Je ne sais pas si vous arrivez à vous représenter, mais en gros, j’ai un afficheur qui écrit TEMPÉRATURE? Avec 4 options : 60, 70, 80 et 95. Ensuite, lorsque l’on appuie sur 1 des 4 boutons, un nouveau menu s’ouvre VOLUME? Avec les choix 0,5; 0,8; 1 et retour en arrière. Je pourrai rajouter une petite notation pour rappeler la température, mais c’est un détail. Si aucune action n’est réalisé après 20000 sec je crois, cela revient à température. Mais maintenant, comment « enregistrer » les 2 choix précédents, pour pouvoir ensuite faire un décompte? J’ai essayé avec des fonctions IF dans les IF mais cela ne fonctionne pas… de plus, la fonction SWITCH ne se téléverse pas… merci

if et switch ne sont pas des fonctions, mais des mots-clés pour des structures de contrôle du langage C. C’est à dire des moyens de combiner des instructions, des conditions etc. pour fabriquer une instruction composée.

Rien n’empêche, et c’est une situation extrêmement fréquente, d’avoir des structures de contrôles emboitées. Et ça marche très bien.

Enfin, il faudrait commencer par définir une structure générale pour les menus, genre un truc comme ça

Les ovales bleus correspondent à des affichages. Bouton 1 (flèches bleues) permet de passer au SUIVANT. Bouton 2 (rouge) de SELECTIONner. Les actions sont en vert (noter la temperature / le volume / lancer le machin).

menu.png
menu.png

On peut imaginer que les 2 autres boutons sont PRECEDENT et RETOUR. C’est le grand luxe. On peut aussi imaginer que si on est dans un sous-menu et qu’on ne touche rien pendant un certain temps (2 secondes), il y a retour automatique au premier menu.

+0 -0

D’accord je vois, pourtant, lorsque je le fais, cela ne marche pas… ainsi, j’aimerai, après que le 2eme menu soit affiché, faire 4 IF pour le choix 1, le choix 2, le choix 3 et le choix 4 dans chaque IF déjà faits, et ensuite démarrer le décompte, mais cela ne fonctionne pas… pour Switch, je ne pourrai pas l’utiliser visiblement avec mon Arduino…

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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