Partage
  • Partager sur Facebook
  • Partager sur Twitter

Menu simple LCD ARDUINO UNO

Sujet résolu
    12 août 2020 à 14:14:46

    Bonjour, j'ai un petit problème et j'espère que vous pouvez m'aider. Mon écran LCD clignote lors de l'affichage de mes menus.

    Une partie de mon projet et de réaliser un menu sur un LCD 2*16 avec un ARDUINO UNO.

    Le premier menu doit afficher la charge de ma batterie.

    Le deuxième menu doit afficher la température et l'humidité.

    J'ai utilisée la fonction swtich pour afficher les différents menu.

    Mes break; sont présent et pourtant les menus continus de clignoter. Je pense que le programme reboucle sur les cases 1 et 2 car toutes les conditions sont encore vraie. Mais je n'arrive pas en l'enrailler. Auriez vous une solution et ou correction ?

    Merci

    // Programme défilement des paramètres LCD : 1 clic = Charge Batterie, 2ème clic = Moyenne °C Moyenne %H 
    	
      int EtatBP = digitalRead(0);
      
      if (EtatBP  == HIGH  && EtatPrecedentMenu == 0) // Bouton menu enfoncé
    	{
        compteurMenu ++;
      	}
      EtatPrecedentMenu = EtatBP;
      Serial.print("compteurMenu = ");
      Serial.println(compteurMenu);
      
      if (compteurMenu >1)
        {
        compteurMenu = 0;
        } 
      switch (compteurMenu)
        {
    
    // Programme Affichage % de charge batterie :	
        
        case 0:
        //Serial.println("Je suis dans case 0");
    
    lcd.clear();
      	
            lcd.setCursor(0,0);
    	lcd.print("Charge =");
    	lcd.setCursor(0,1);  
    	lcd.print(URead/10);
    	lcd.setCursor(6,1);
     	lcd.print("%");
        break;
          
    // Programme Temperature et Humidité
      
       case 1: 
       //Serial.println("Je suis dans case 1");
       	
    lcd.clear();
    
      	lcd.setCursor(0,0);
    	lcd.print("Temp. =");
            lcd.print(" XX ");
            lcd.print(" C");
            lcd.setCursor(0,1);
    	lcd.print("Humi. =");
            lcd.print(" XX ");
            lcd.print(" %");
       	
        break;
     
        } // Fin de switch


    Je sais que le problème vient des lcd.clear.

    Hypothèse :

    Une partie de la solution ne serait de demander de ne rien afficher sur les segments à effacer ?

    Ex.

    lcd.setCursor(nb de caractère a garder, 0);

    lcd.print("        ");

    Cependant cela m'oblige a compter les cases non utilisée dans chaque menu.

    Je viens d'essayer cela fonctionne et mon lcd ne clignote plus....:-°

    Merci :euh:

    N'y a t'il pas une fonction permettant de tout effacer sauf le lcd.print("blabla") qui nous intéresse ?

    -
    Edité par Franck Saurat 12 août 2020 à 14:32:57

    • Partager sur Facebook
    • Partager sur Twitter
      12 août 2020 à 14:39:42

      Salut ! Ton code est bizarre:

      • Pourquoi utiliser une variable que tu utilises comme un entier alors que tu pourrais l'utiliser comme un booléen ?
      • S'il  te plait le coding style à la GNU ça donne envie de se crever les yeux...

      Ensuite, je ne sais pas si ça fait partie des contraintes, mais je vois pas trop en quoi le fait d'avoir une variable qui sauvegarde l'état du choix précédent est utile.

      Des solutions et des corrections tu en trouves partout en cherchant bien. Mais le but du jeu c'est de réfléchir par toi même. Je ne pense pas que le problème vienne de ton switch en lui même. Tu devrais analyser ton montage en profondeur et debug ton code en y plaçant des "Serial.print" à tous les points clés du programme. Tu finiras bien par trouver le problème, et c'est d'autant plus gratifiant quand tu le résous par toi même.

      • Partager sur Facebook
      • Partager sur Twitter
        13 août 2020 à 14:37:33

        Bonjour,

        Merci pour tes remarques et réponse.

        Je débute dans la programmation Arduino et je pense que je vais legerement plus vite que la musique.

        Je viens de lire qu'il est important de bien choisir le type des variables.

        Il est vrai que j'ai pris la solution de facilité utilisant quasiment que des 'int'.

        Je vais étudier cela quand toutes les parties de mon programme fonctionneront comme voulu et le retaper au propre.

        Bon pour le "coding GNU" je vais aussi essayer de remplacer mes valeurs de pin par des noms et me service des bytes pour le changement d’état. Je pense que ta remarque voulait dire ca ?

        Je cherche par moi même merci.

        Sinon j'ai résolu mon problème.

        Je place le sujet en résolu.

        Merci

        Salutation,

        Franck

        • Partager sur Facebook
        • Partager sur Twitter
          13 août 2020 à 15:25:15

          Juste pour compléter la conversation:

          En fait c'est justement en utilisant une majorité de "int" que tu te compliques la vie. Profite du C++, le built-in type "bool" fait parfaitement le boulot que tu recherches !

          En ce qui concerne du coding-style, je parlais de ta façon d'arranger ton code. Le placement des accolades, le nommage des variables, le nommage des fonctions etc. Après c'est un choix très personnel, tu as parfaitement le droit d'écrire ton code comme tu veux.

          • Partager sur Facebook
          • Partager sur Twitter
            17 août 2020 à 18:38:34

            Daimyo_ a écrit:

            Ensuite, je ne sais pas si ça fait partie des contraintes, mais je vois pas trop en quoi le fait d'avoir une variable qui sauvegarde l'état du choix précédent est utile.

            ça évite d'incrémenter à chaque fois si le bouton est resté au niveau haut. en d'autres termes, on incrémente que si l'on est passé par un état 0 du bouton. (si on a plus de 2 menus, ça peut-être utile)

            @FranckSaurat: Quelle a été ta solution ? (si d'autres ont un soucis similaire et qu'ils cherchent une solution)

            • Partager sur Facebook
            • Partager sur Twitter

            Menu simple LCD ARDUINO UNO

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown