#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);
}