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
N'y a t'il pas une fonction permettant de tout effacer sauf le lcd.print("blabla") qui nous intéresse ?
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.
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 ?
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.
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)
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.
https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/
https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/