Bonjour à tous,
aujourd'hui je souhaite afficher sur les deux lignes d'un lcd 16x2,
des lignes de texte d'un fichier txt de la carte SD.
Je nage dans la conversion de chaine...
Remarque: tu ne peux pas relire plusieurs fois le même caractère car dans tel que ton programme est fait tu affiches un caractère sur deux sur la liaison série et un caractère sur deux sur le lcd.
j'ai encore un souci :
le texte s'affiche sans prendre en compte la taille de l'écran.(il continu d'écrire dans le vide)
Je souhaiterai que le code affiche mon texte
au fur et à mesure, ligne par ligne sur les 2 lignes de mon lcd 16x2.
PS : chaque ligne de mon fichier txt fait moins de 16 caractères.
j'ai essayé "Ligne 1 \n Ligne 2 \n Ligne 3 ..." dans mon txt mais rien y fait.
A nouveau merci Kamill,
je sors des tests enfin !!
#include <SPI.h>
#include <SD.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
File fichierSD;
void setup() {
SD.begin(3);
lcd.begin(16, 2);
Serial.begin(9600);
}
void loop() {
fichierSD = SD.open("test.txt");
static int ligne=0;
while (fichierSD.available()) {
char c=fichierSD.read();
if (c=='\n')
{
ligne=(ligne+1)%2; // nouvelle ligne
delay(600);
if (ligne==0)
lcd.clear();
else
lcd.setCursor(ligne,1);
}
else
{
lcd.print(c);
}
}
}
La lecture fonctionne durant la première boucle.
Au démarrage de la seconde boucle
la ligne n2 du lcd n'apparaît pas, elle est remplacée par la ligne n3.
Ps : dés la première boucle, il y à un espace (non voulu) au début de la 2e ligne du lcd.
Bonsoir à tous,
et encore merci Kamill,
pour le temps passé a combler le vide sidérale,
dont je souffre en programmation.
Les modifs du code ont supprimé l'espace sur la ligne 2 du lcd. (j'aurai pu y pensé... mais non...(
#include <SPI.h>
#include <SD.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
File fichierSD;
void setup() {
SD.begin(3);
lcd.begin(16, 2);
Serial.begin(9600);
}
void loop() {
fichierSD = SD.open("test.txt");
static int ligne=0;
while (fichierSD.available()) {
char c=fichierSD.read();
if (c=='\n')
{
ligne=(ligne+1)%2; // nouvelle ligne
delay(300);
if (ligne==0)
lcd.clear();
else
lcd.setCursor(0,ligne);
}
else
{
lcd.print(c);
}
}
}
En revanche le code tourne bien durant la première boucle,
à la seconde boucle,
la ligne 2 du fichier txt n'est pas imprimée,
le programme passe directement à la 3e ligne du fichier txt
et l'imprime en ligne 2 du Lcd (soit la ligne 1 du code).
A la boucle suivante tout fonctionne à nouveau et ainsi de suite.
L'afficheur n'a pas de caractères accentués dans son générateur de caractère.
Pour afficher des caractères accentués avec ce type d'afficheur, il faut définir des caractères spéciaux (8 caractères max) et les afficher à la place des caractères accentués.