je travaillais sur un programme qui me permet de défiler le texte « BONJOUR » de gauche à droite sur une ligne du LCD. Pour cela chaque lettre du mot « BONJOUR » est dans une case d’un tableau déclaré char tablettre[]= "BONJOUR".
j'ai essayé de modifier ce programme pour que lorsqu’une lettre sort de l’écran, elle réapparaisse à gauche mais j'ai pas trouvj'ai trouvé de solution .
Merci en avance pour l'aide.
#include "Wire.h" // bibliotheque I2C
#include "rgb_lcd.h" // bibliotheque LCD
rgb_lcd lcd; // change le nom de la bibliotheque pour simplifier l’ecriture
int colorR = 255; // Couleur du retroeclairage
int colorG = 255;
int colorB = 255;
char tablettre[]= "BONJOUR" ;
int i=0;
void setup()
{
Wire.begin(); // initialisation de l’I2C
lcd.begin(16, 2); // Configuration colonnes, lignes du LCD utilise
lcd.setRGB(colorR, colorG, colorB);
}
void loop()
{
String TAB = tablettre;
for(int i=0;i<16;i++){
lcd.clear();
lcd.setCursor(i,0);
lcd.print(TAB.substring(16,0));
delay(500);
}
for(int i=0;i>=sizeof(tablettre)-1;i--){
lcd.clear();
lcd.setCursor(0,0);
lcd.print(TAB.substring(i+16,i));
delay(500);
}
}
Voilà une façon de faire, mets ta console à 115200:
String tablettre = "BONJOUR " ; // 16 caractères
void setup()
{
Serial.begin(115200);
}
void loop()
{
Serial.println(tablettre);
char dernierCaractere = tablettre.charAt(15); // On garde le dernier caractère
for (int c = 15; c >= 0; c --) // Décalage du texte vers la droite
{
tablettre.setCharAt(c, tablettre.charAt(c-1));
}
tablettre.setCharAt(0, dernierCaractere); // Le dernier caractère devient le premier
delay(1000);
}
le commentaire ne définit pas du tout ce que vous faites vraiment... Vous créez une instance de la classe rgb_lcd, classe qui est connue puisque vous avez importé la bibliothèque
si vous appelez clear l'écran va clignoter, il vaut mieux afficher des espaces sur ce que vous voulez effacer
un exemple ici si vous ne voulez pas extraire des sous chaines mais juste calculer où afficher quel caractère en revenant au début si on a atteint le bout de l'écran
vous pouvez le faire tourner dans le simulateur
#include <LiquidCrystal_I2C.h>
const int nbCols = 16;
const int nbLignes = 2;
LiquidCrystal_I2C lcd(0x27, nbCols, nbLignes);
const char * message = "BONJOUR";
int pos = -1; // la position où afficher le texte.
void decaler() {
if (pos >= 0) {
// on efface le caractère qui était là
lcd.setCursor(pos, 0);
lcd.write(' ');
} else {
// début du code, on efface l'écran
lcd.clear();
}
// on augmente de 1 la position d'affichage, si on atteint le bord de l'écran on revient à 0
if (++pos >= nbCols) pos = 0;
int cptr = 0; // compte le nombre de caractères déjà affichés
// on affiche les caractères un par un.
// On arrête si on atteint le bord de l'écran ou la fin de chaîne
for (int p = pos; p < nbCols && (message[cptr] != '\0'); p++) {
lcd.setCursor(p, 0);
lcd.write(message[cptr++]);
}
// on continue d'écrire les caractères si nous ne sommes pas arrivés à la fin du message
for (int p = cptr; message[p] != '\0'; p++) {
lcd.setCursor(p - cptr, 0);
lcd.write(message[p]);
}
}
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
}
void loop() {
decaler();
delay(50);
}
#include "Wire.h" // bibliotheque I2C
#include "rgb_lcd.h" // bibliotheque LCD
rgb_lcd lcd; // change le nom de la bibliotheque pour simplifier l’ecriture
int colorR = 255; // Couleur du retroeclairage
int colorG = 255;
int colorB = 255;
String tablettre = "BONJOUR " ; // 16 caractères
int i=0;
void setup()
{
Wire.begin(); // initialisation de l’I2C
lcd.begin(16, 2); // Configuration colonnes, lignes du LCD utilise
lcd.setRGB(colorR, colorG, colorB);
lcd.clear();
}
void loop()
{
lcd.setCursor(0,0);
lcd.print(tablettre);
texteDecalage();
delay(500);
}
void texteDecalage()
{
char dernierCaractere = tablettre.charAt(15); // On garde le dernier caractère
for (int c = 15; c >= 0; c --) // Décalage du texte vers la droite
{
tablettre.setCharAt(c, tablettre.charAt(c-1));
}
tablettre.setCharAt(0, dernierCaractere); // Le dernier caractère devient le premier
}
Je n'ai pas pû essayer en vrai, je n'ai pas ce type d'affichage.