Bonjour à tous.Je veut afficher un texte qui deffile sur mon écran lcd.J'ai donc codé le programme suivant
#include "LiquidCrystal.h" //ajout de la librairie
#include<stdio.h>
#include<string.h>
//Vérifier les broches !
LiquidCrystal lcd(11,10,9,8,7,6,5,4,3,2); //liaison 8 bits de données
#define TAILLE_MAX 50
void setup()
{
lcd.begin(16, 2);
lcd.setCursor(14,0);
lcd.leftToRight(); //indique que le texte doit être déplacer vers la gauche
lcd.autoscroll(); //rend automatique ce déplacement
int nb_elements = 0;
char tableau[TAILLE_MAX]="Bonjour je test le programme ";
nb_elements= strlen(tableau);
ajouter_element(tableau, &nb_elements);
int i;
for(i=0; i<nb_elements -1; i++)
{
lcd.print(tableau[i]);
delay(100);
}
lcd.print(".");
}
void ajouter_element(char tab[], int* nb)
{
/*
ajout d'un élément en tab[*nb]
vérifier qu'on a pas dépasser la limite TAILLE_MAX
*/
(*nb)++;
}
void loop() {}
Le texte défile bien sur la premiere ligne de l'afficheur sauf les dernier caractéres qui sont sur la deuxieme lignes de l'ecran.Je ne comprend pas pourquoi
Bon depuis ce matin que j'essaie de poster, rééssayons...
- Que veux tu faire avec la fonction ajouter_element
- Pourquoi n'utilises tu pas simplement pas la fonction lcd.write pour envoyer tout ton texte en une seule fois ?
Alors je veux envoyer du texte déffilant sur mon afficheur.Mais je veux que la taille tableau s'adapte à la taille de mon texte.Si je met tab[50] = "balabla" , l'afficheur va bien envoyer "balabla" mais aussi une suite de caractére jusqu'au caractére a l'indice 50.
Tu peux déjà essayer un code plus simple et voir si tout marche comme tu veux
(et je vois toujours pas le but de la fonction, car elle touche pas au tableau, elle se contente d'incrémenter la variable nb)
void setup()
{
lcd.begin(16, 2);
lcd.setCursor(14,0);
lcd.leftToRight(); //indique que le texte doit être déplacer vers la gauche
lcd.autoscroll(); //rend automatique ce déplacement
int nb_elements = 0;
char tableau[TAILLE_MAX]="Bonjour je test le programme ";
lcd.write(tableau);
}
Je pense que c'est ta string qui est mal initialisée.
Tu peux faire comme ça :
char tableau[TAILLE_MAX]="Bonjour je test le programme ";
Mais dans ce cas là, n'oublie pas le caractère de fin de chaîne '\0'.
Et c'est certainement pour ça que ton strlen foire, car celui-ci recherche ce '\0' pour te renvoyer la taille. S'il ne le voit pas, il te renvoie n'importe quoi.</span>
Erreur de ma part, je pensais qu'on pouvait pas faire comme ça, mais en fait si...
Sinon tu peux déclarer de cette manière :
char *tableau = "Bonjour je test le programme "
Qui va te rajouter automatiquement le caractère de fin de chaîne après ta string.
Après si tu veux changer le texte, et que tu ne sais pas la taille à l'avance, il te faudra utiliser les malloc (allocation de mémoire dynamique).
La première écriture (avec les []) rajoute aussi le caractère de fin de chaine (il est "sous-entendu" à cause des double guillemets qui définissent une chaîne de caractère).
Mais je viens de relire le premier post. Les caractères défilent bien sur la première ligne c'est ca ? (mais dès que tu arrives à plus de caractères que la largeur peut en contenir ca "bug" ?)
Je suis pas sur qu'on pourra y remédier, car le problème vient je pense du controleur dans le LCD qui pourra pas gérer ca correctement (il fait "déborder" les caractères en trop sur la seconde ligne)
Ce que je comprend pas c'est qu'il fait bien déffiler la phrase sur la premiere ligne de l'ecran "Bonjour je test le progra" et il ce met à écrire sur la deuxieme ligne "mme"
J'ai beau chercher je ne trouve pas
Comme je te disais plus tôt, ce n'est pas la faute de ton programme, mais c'est plutôt une limite du matériel (ou de la librairie, j'ai pas cherché). Quand la première ligne est pleine, si tu ne replaces pas ton curseur il continue sur la seconde
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !