Go Down

Topic: Affichage sur LCD display (Read 1 time) previous topic - next topic

blueghost

Bonjour,

Nouvel utilisateur d'Arduino, je bosse sur un petit projet avec afficheur LCD 16*4. En utilisant la library LCD arduino tout fonctionne correctement. J'ai simplement un petit problème qui va faire certainement rire les experts, mais je me lance tout de même.

Je dois afficher la valeurs en pourcentage de la position d'un potentiomètre. Sur le fond aucun problème. Mais comme ma plage varie de 0% à 100%, j'ai donc de 1 à 3 caractères. Aucun pb pour les afficher sauf que lorsque je passe par la valeur 100% et que je redescends, pour 75% je n'obtiens pas "75" à l'écran mais "750" car il a conserver à l'écran le dernier caractère ("0") du "100%.  :'(

j'ai bien essayer de faire un lcd.clear en début de chaque boucle, mais avec cette technique, la rémanence du lcd fait que l'affichage tremble. C'est particulièrement inconfortable.

Je suis sûr qu'il existe un moyen très simple de gérer ça, mais mes recherches étant restées infructueuses pour le moment je me tourne vers vous car le temps m'est compté pour terminer ce projet.

Voici un petit bout de mon code pour cet affichage, pour le moment je luis demande d'afficher des espaces pour "effacer" à chaque boucle mes caractères est palier au problème. Le problème est que la aussi, la rémanence fait que ce n'est pas très confortable. Ce code se trouve dans ma boucle principale.

sensorTime = analogRead(sensorTimePin);                    
 OnTime = ((1023-sensorTime)*10);                          
 lcd.setCursor(23, 1);
 lcd.print(OnTime);
 lcd.print("     ");

Merci pour vos conseils.

Jean-François

Faire un lcd.clear() uniquement lors de changement de la valeur onTime.
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

blueghost

Ok c'est ce que je me disais: un clear uniquement sur changement de valeur.

Ok, je vais donc coder cette détection de changement de valeur... Au boulot.

Merci pour l'info.

Blob

#3
Nov 25, 2010, 06:01 pm Last Edit: Nov 25, 2010, 06:02 pm by blob Reason: 1
Bonjour,

J'ai eu le même problème d'affichage. Un clear est efficace, mais même si il est rare, il "choque" un peu les yeux. Voilà ma méthode pour éviter ça (mais il y en a surement plein d'autres).

Il y a d'ailleurs trois problèmes : ne pas faire clignoter, ne pas devoir tout réécrire après un clear, et garder les nombres calés à droite. C'est à dire que les unités sont toujours au même endroit (ce qui est beaucoup plus lisible et agréable selon moi, mais les gouts et les couleurs... :-)

En reprenant votre code, et en imaginant que "OnTime" vaut entre 0 et 100 en entiers (pas de virgules, pas de "-", etc.), je ferais (à vérifier si je n'ai pas fait de faute de syntaxe) :

Code: [Select]
lcd.setCursor(23, 1);
if(OnTime < 100) lcd.print(" ");
if(OnTime < 10) lcd.print(" ");
lcd.print(OnTime);


En gros, si c'est 100, on affiche 100. Si c'est moins que 100, on ajoute un espace qui va effacer l'éventuel "1" et qui va mettre un espace à la place des centaines pour aligner le reste. Puis, si c'est moins de 10, on ajoute un second espace qui va effacer l'éventuelle dizaine précédente et aligner le dernier chiffre.

C'est basique, ça ne marche pas pour les nombres négatifs (à gérer à part), mais pour votre cas, ça semble convenir, non ?

En espérant que ça vous soit utile.

Frédéric / Strasbourg

Snootlab

#4
Nov 30, 2010, 02:27 pm Last Edit: Nov 30, 2010, 02:28 pm by snootlab Reason: 1
Bonjour,

pour palier a ce problème, on peut aussi ajouter un digit et le cacher,

j'avais fait ça pour un compte tour avec afficheur LCD

http://web.tetalab.org/2009/09/23/compteur-rpm-affichage-lcd.html

Lionel
- Distributeur officiel Arduino - France

Go Up