Go Down

Topic: LCD scroller texte sans la fonction prévue... (Read 498 times) previous topic - next topic

nono7380

Aug 10, 2013, 08:25 pm Last Edit: Aug 10, 2013, 08:28 pm by nono7380 Reason: 1
Bonjour,
j'aimerais faire défiler un texte sur une ligne de mon LCD (2*16 ou 4*20) sans utiliser la fonction lcd.scrollDisplayLeft().
J'ai créé une routine (void) qui marche très bien mais uniquement si j'affiche que 16 charactères (sur le 2*16). Dès que j'en mets plus, c'est fini...

Code: [Select]

const int lcdx = 20;    //Nbres caratères horizontal
const int lcdy = 4;     //Nbres caratères vertical

 data="Waiting Data ... Waiting Data ...";
 temps = millis();  



if(!serie && (millis()-temps > 500)){      //Fait scroller le texte manuellement tant qu'
  temps = millis();                       //aucune donnée n'est recu par le port serie.
i +=1;
   affiche=data.substring(i,i+lcdx);

   lcd.setCursor(0,1);
   lcd.print(affiche);
   
  if(i==lcdx+1){
   i=0;}
}


Je peux donner le code complet;
En fait, je reçois une donnée serie sous format:
Lxx-message (xx= ligne) pour un affichage simple sur la ligne xx
Sxx-message (xx= ligne) pour un scroll (infini) de cette ligne
Xxxyy-message (xx=ligne; yy=colonne) pour afficher à telle place.

J'aurais besoin d'aide pour faire une routine "universelle" pour le scroll, en tenant juste compte de lcdx (variable constante nombres de caractères du LCD).

fdufnews

Code: [Select]
affiche=data.substring(i,i+lcdx);
ce n'est pas tout à fait aussi simple.
Si i+lcdx est supérieur à la longueur de la chaîne, il faut aller prendre les caractères au début de la chaîne ou remplir avec des espaces et ne reprendre au début de la chaîne qu'après avoir vidé l'écran.

nono7380

En effet, mettre un espace, et reprendre du début de la chaine.

Go Up