Go Down

Topic: Vitesse de défilement sur un LCD HD44780 (Read 862 times) previous topic - next topic

Chacalito

Salut à tous,

Désolé par avance pour la question bas de gamme qui va suivre  :)

En fouillant divers tutoriels sur Internet pour arriver à faire fonctionner un écran LCD HD44780 16x2, j'ai trouvé la commande "lcd.scrollDisplayLeft();". J'ai donc voulu l'utiliser comme indiqué ci-dessous :

Code: [Select]
lcd.print("Test !");
  for (int positionCounter = 16; positionCounter < 0; positionCounter++) {
    lcd.scrollDisplayLeft();
    delay(150); 
    }


ça semble fonctionner, mais la vitesse de défilement est tellement rapide, que le défilement semble ne rien apporter, un peu comme si le texte "Test !" s'affichait directement par la commande "lcd.print("Test !")".

Est-il possible de régler la vitesse de défilement, et si oui, comment faire ?

Merci :)

ivan201048

tu augmente la valeur de ton delay parce que 150 ms ca va vite ...

bon code ivanutsu

Chacalito

#2
Nov 03, 2012, 11:47 am Last Edit: Nov 03, 2012, 11:59 am by Chacalito Reason: 1
Merci pour ta réponse.

Malheureusement, j'y avais déjà pensé... J'avais fait un test à 15 secondes ("delay(15000);"), mais ça défile toujours aussi rapidement... Et du coup je ne vois pas vraiment de logique dans cette boucle, et donc, je patauge :)

barbudor

Euh, hem, comment dire, Y'a effectivement un truc qui va pas dans ta boucle

Relis encore ton code et tu comprendra pourquoi ca s'exécute à la vitesse de l'éclair ... Ou pas XD

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Chacalito

Ah bah... Effectivement... J'ai trouvé...
A force de trop regarder... Je ne voyais plus rien ! :)

La réponse au cas où certains auraient le même problème :
Code: [Select]
for (int positionCounter = 16; positionCounter < 0; positionCounter++)

Merci en tout cas pour ces réponses rapide !

Tant qu'à y être, une autre pour la route, comment faire pour que seulement la seconde ligne défile ? Afficher un texte en fixe sur la première ligne, et faire en sorte que la seconde ligne s'affiche en défilant ? La commande "lcd.setCursor();" fait effectivement défiler la seconde ligne, mais cela décale la première en même temps...

skywodd

Bonjour,


La réponse au cas où certains auraient le même problème :
Code: [Select]
for (int positionCounter = 16; positionCounter < 0; positionCounter++)

Heu ya toujours un problème ...
Tu pars de 16, puis tant que la valeur est inférieur à 0 tu incrémente ...

Ce serais plutôt :
Code: [Select]
for (int i = 0; i < 16; ++i)


Tant qu'à y être, une autre pour la route, comment faire pour que seulement la seconde ligne défile ? Afficher un texte en fixe sur la première ligne, et faire en sorte que la seconde ligne s'affiche en défilant ? La commande "lcd.setCursor();" fait effectivement défiler la seconde ligne, mais cela décale la première en même temps...

Soit tu réécris la 1er ligne à chaque fois, soit tu fait ta propre fonction de défilement.
La fonction scrollDisplayLeft() décale toute les lignes sans distinction.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

barbudor

@Skywodd: tu gâches tous mes effets ;)

@Chacalito : la fonction scroll est une fonction hardware du LCD
ATTENTION : Elle ne décale pas les caractères dans la mémoire de l"afficheur mais déplace le point d'affichage dans la mémoire

Le LCD a une mémoire de 2 lignes de 80 caractères.
Par défaut, le LCD affiche les 16 premiers caractères de chaque ligne
Quand tu fait un scrollleft, le LCD se décale et affiche à partir du 2eme caractère de chaque ligne
Si tu continue, tu déplaces la fenêtre d'affichage dans la mémoire de 2x80 caractères.
scrollright fait le contraire.

Il n'est donc pas possible de décaler indépendamment les 2 lignes.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

skywodd


@Skywodd: tu gâches tous mes effets ;)

J'aime pas voir des boucles incohérentes ça me stress :P
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Chacalito

Merci pour toutes ces précisions, notamment au niveau des détails de la fonction "lcd.ScrollDisplayLeft/Right();", je n'étais pas au courant du coup des 80 caractères :)

@skywodd : Je ne comprends pas. Mon code semblait fonctionner malgré l'erreur que tu soulignes dans ton message. Je viens de réaliser un petit programme pour essayer avec ce que tu me suggères, mais je coince...

Code: [Select]
void loop()
{
 //Je place le curseur en dehors de la zone d'affichage pour le faire s'afficher par la gauche
 lcd.setCursor(16, 0);
 //Le message à afficher de gauche vers la droite
 lcd.print("TEST #1");
 //Début de la boucle qui est supposée se répéter 16 fois, jusqu'à ce que le texte soit arrivé "en butée" à gauche de l'écran.
 for (int i = 0; i < 16; ++i);
 {
 //La fonction à répéter 16 fois
   lcd.scrollDisplayLeft();
   delay(150);
 }
}


En faisant ainsi, non seulement la valeur de "delay();" n'a plus aucun effet sur la vitesse de défilement, mais le texte continue de défiler jusqu'à en sortir de la zone d'affichage (je suppose qu'il se décale sur les 80 caractères de mémoire dont barbudor me parle)...

C'est dingue, plus j'ai l'impression de comprendre, plus je recule :)

Désolé de vous pourrir la vie avec ces questions bas de gamme qui doivent sembler bien basiques, mais merci encore pour le temps que vous m'accordez !


Go Up