Pages: [1]   Go Down
Author Topic: Vitesse de défilement sur un LCD HD44780  (Read 821 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut à tous,

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

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:
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 smiley
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

bon code ivanutsu
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
« Last Edit: November 03, 2012, 05:59:26 am by Chacalito » Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-lol

Logged

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 ?

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

La réponse au cas où certains auraient le même problème :
Code:
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...
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

La réponse au cas où certains auraient le même problème :
Code:
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:
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.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@Skywodd: tu gâches tous mes effets smiley-wink

@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.
Logged

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 ?

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@Skywodd: tu gâches tous mes effets smiley-wink
J'aime pas voir des boucles incohérentes ça me stress smiley-razz
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley

@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:
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 smiley

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 !

Logged

Pages: [1]   Go Up
Jump to: