Défilement boucle sur lcd 16x2

Bonjour,

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

Bonjour Skyscraper0602

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

Cordialement
jpbbricole

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

J'ai essayé d'utiliser votre programme mais la lcd affiche BONJOUR dans la première ligne et puis reste fixée sans déplacement.

Bonjour Skyscraper0602

Mets ton sketch en ligne.

Cordialement
jpbbricole

Bonjour Skyscraper0602

De par là, je voulais dire ton programme :wink:

Cordialement
jpbbricole

Bonsoir Skyscraper0602

Il fallait intégrer la méthode de décalage dans ton programme, ça donne ceci:

#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.

Cordialement
jpbbricole

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.