LCD 4x20, affichage des lignes

Bonjour,

Je dispose d'un afficheur 4 lignes, 20 caractères(http://www.sure-electronics.net/mcu,display/DE-LM005.pdf). J'utilise la librairie arduino 4 bits, ca fonctionn bien, maintenant :wink:

Mais, il y a un mais, les lignes s'affichent bizarrement.

Par exemple, pour la phrase "la prairie est verte. Les oies sont belles et le coq chantent", ca donne :

chantent.xxxxxxxxxxxx
la prairie est verte. Les
xxxxxxxxxxxxxxxxxxxx
oies sont belles et le coq

les x etant rien du tout, du "blanc".

Pourquoi est-ce ainsi ?

Merci pour votre aide.

quel est le code qui te permet d'envoyer tout d'un coup ? je n'ai pas l'habitude d'envoyer tout le texte, d'habitude je spécifie à la librairie où je veux que le texte s'affiche.

J'écris just :

lcd.print("la phrase que je veux afficher");

comment je doi faire pour spécifier la facon dont je veux que cela s'affiche ?

merci pour votre aide.

Bonsoir,

La commande des afficheurs se fait en envoyant les codes des caractères à des adresses.
A chaque ligne correspond en general une banque mémoire ( adresse 00h pour la 1ère ligne, 40h pour la 2ème, etc ...).

Pour ton problème, j'ai comme l'impression que la routine que tu utilises se mélange un peu les pinceaux ... ou bien, n'est pas adaptée à ton afficheur ( nb ligne et/ou nb de caractères différent ).

Je cherche sur le net une datasheet un peu plus complète de ton afficheur car celle que tu as est un peu légère.
Elle permettra sans doute d'y voir plus clair.

Je te transmets les resultats si je trouve quelque chose.
A+

ben sinon tu découpes ta chaine pour correspondre.

les lcd affichent comme ça.
ligne 1-> ligne 3
ligne 2 -> ligne 4

// ecriture des lignes
  lcdGotoXY(1, 0);
  strncpy(ligne,chaine,16);
  if (strlen(ligne) >= 16) {
    ligne[16] = '\0';
  }
  // ecrit la ligne
  printStringLCD(ligne);
  delay(100);
  *ligne=" ";
  for (i=2; i<=4;i++) {
    lcdGotoXY(i, 0);
    strncpy(ligne,&chaine[16*(i-1)],16);
    if (strlen(ligne) >= 16) {
      ligne[16] = '\0';
    }
    // ecrit la ligne
    printStringLCD(ligne);
    delay(100);
    *ligne=" ";
  }

j'avais fait un truc comme ça... (un peu de C et de pointeurs)

si ça peut aider :-[

Ok, merci je vais tenter ca et vous tient au courant.