PROBLEMA LCD

ciao...si può fare...all'epoca mi ero fatto una funzione per aggiornare una riga (scrolling text)...sdoppiando la funzione puoi avere uno scrolling asincrono...tipo:

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3f, 16, 2);

char p1[] = "fatti non foste a viver come bruti ma per seguir virtute e conoscenza";
char p2[] = "We all live in a yellow submarine...";
boolean nuovaP = true;
unsigned long myMillis;
unsigned long myMillis2;

void setup() {
  lcd.begin();
  lcd.setCursor(0, 0);
  myMillis = millis();
  myMillis2 = millis();
  aggiornaLCD_0(p1, 16 , nuovaP);
  aggiornaLCD_1(p2, 16 , nuovaP);
  nuovaP = false;
}

void loop() {

  if (millis() - myMillis >= 500) {
    aggiornaLCD_0(p1, 16 , nuovaP);
    myMillis = millis();
  }
    if (millis() - myMillis2 >= 900) {
    aggiornaLCD_1(p2, 16 , nuovaP);
    myMillis2 = millis();
  }
}
/* *stringa = stringa da far scorrere su LCD
   L_LCD = numero colonne LCD
   stringaNew = se è una nuova stringa per reset conteggio posizione
*/
void aggiornaLCD_0(char *stringa, byte L_LCD, boolean stringaNew) {
  static int pos = 0;
  if (stringaNew) {
    pos = 0;
  }
  char z[L_LCD + 1];
  for (byte i = 0; i <= L_LCD; i++) {
    z [i] = *(stringa + (i + pos));
  }
  lcd.setCursor(0, 0);
  lcd.print(z);
  pos++;
  if (pos >= (strlen(stringa) - L_LCD)+1) {
    pos = 0;
  }
}

void aggiornaLCD_1(char *stringa, byte L_LCD, boolean stringaNew) {
  static int pos = 0;
  if (stringaNew) {
    pos = 0;
  }
  char z[L_LCD + 1];
  for (byte i = 0; i <= L_LCD; i++) {
    z [i] = *(stringa + (i + pos));
  }
  lcd.setCursor(0, 1);
  lcd.print(z);
  pos++;
  if (pos >= (strlen(stringa) - L_LCD)+1) {
    pos = 0;
  }
}