#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
void setup()
{
lcd.init();
lcd.clear();
lcd.backlight();
}
void loop()
{
char line0[99];
char line1[99];
static int m=1;
static int n=0;
sprintf(line0,"variable = %d this is a long text.",m) ;
sprintf(line1,"variable = %d this is a long text.",n) ;
m=m+7;
n=n+1;
lcd.setCursor(0,0);
lcd.print(lineX(0,line0,100));
lcd.setCursor(0,1);
lcd.print(lineX(1,line1,500));
}
String lineX(int g,char c[],unsigned long milliseconds)
{
static int q[2][99];
static int r[2]={-1,-1};
static unsigned long time[2]={0,0};
unsigned long mill = millis();
if (time[g]==0){time[g]=mill;}
int i,j,k;
j = strlen(c);
char d[j];
if (r[g]!= j)
{
r[g]=j;
for (i = 0; i < j; i++)
{
q[g][i]=i;
}
goto JUMP;
}
if (mill-time[g]< milliseconds){goto JUMP;}else{time[g]=mill;}
for (i = 1; i < j; i++)
{
k=q[g][i-1];
q[g][i-1]=q[g][i];
q[g][i]=k;
}
JUMP:
for (i = 0; i < j; i++)
{
d[i] = c[q[g][i]];
}
return d;
}