LCD scroller texte sans la fonction prévue...

Bonjour,
j'aimerais faire défiler un texte sur une ligne de mon LCD (216 ou 420) sans utiliser la fonction lcd.scrollDisplayLeft().
J'ai créé une routine (void) qui marche très bien mais uniquement si j'affiche que 16 charactères (sur le 2*16). Dès que j'en mets plus, c'est fini...

const int lcdx = 20;    //Nbres caratères horizontal
const int lcdy = 4;     //Nbres caratères vertical 

  data="Waiting Data ... Waiting Data ...";
  temps = millis();  



if(!serie && (millis()-temps > 500)){      //Fait scroller le texte manuellement tant qu' 
   temps = millis();                       //aucune donnée n'est recu par le port serie.
 i +=1;
    affiche=data.substring(i,i+lcdx);
 
    lcd.setCursor(0,1);
    lcd.print(affiche); 
    
   if(i==lcdx+1){
    i=0;} 
}

Je peux donner le code complet;
En fait, je reçois une donnée serie sous format:
Lxx-message (xx= ligne) pour un affichage simple sur la ligne xx
Sxx-message (xx= ligne) pour un scroll (infini) de cette ligne
Xxxyy-message (xx=ligne; yy=colonne) pour afficher à telle place.

J'aurais besoin d'aide pour faire une routine "universelle" pour le scroll, en tenant juste compte de lcdx (variable constante nombres de caractères du LCD).

affiche=data.substring(i,i+lcdx);

ce n'est pas tout à fait aussi simple.
Si i+lcdx est supérieur à la longueur de la chaîne, il faut aller prendre les caractères au début de la chaîne ou remplir avec des espaces et ne reprendre au début de la chaîne qu'après avoir vidé l'écran.

En effet, mettre un espace, et reprendre du début de la chaine.