Problema con il metodo autoscroll() della libreria LiquidCrystal

Ciao a tutti ho il seguente problema (premetto che sono nuovo e ringrazio in anticipo chiunque mi possa aiutare) :
Ho la necessita di visualizzare un messaggio piuttosto lungo nel setup() sulla prima riga di un display lcd(20x2), a tal proposito volevo utilizzare il metodo autoscroll() della libreria LiquidCrystal ma quando la scritta da visualizzare è più lunga di 20 caratteri si visualizzano automaticamente caratteri su ambedue le righe, ovvero le singole lettere di una parola vengono inviate in modo casuale sulla prima riga o sulla seconda.
Perciò avevo provato a dividere la stringa contenente l'intero messaggio in 13 stringhe ognuna da 20 caratteri (riconosco che il metodo non è dei migliori) e stamparle ad una alla volta, ma anche in questa maniera non funziona ...... qualcuno riesce a spiegarmi il motivo????
Riporto il codice:

LiquidCrystal lcd(2, 3, 4, 9, 10, 11, 12);
// STRINGA DEL MENU' INIZIALE
String menu1 ="Premere il pulsante "; // Primi 20 caratteri della stringa
String menu2 ="centrale per imposta"; // Altri 20 caratteri successivi della stringa
String menu3 ="re la temperatura ma";
String menu4 ="ssima e minima ";
String menu5 =" Premer";
String menu6 ="e il pulsante superi";
String menu7 ="ore per accendere o ";
String menu8 ="spegnere la stufa ";
String menu9 =" Pre";
String menu10 ="mere il pulsante inf";
String menu11 ="eriore per visualizz";
String menu12 ="are lo stato della s";
String menu13 ="tufa "; // Ultimi 20 caratteri della stringa

void setup(){
//Visualizzo la stringa

lcd.clear();
lcd.home();

// Visualizzo la prima stringa senza il metodo autoscroll()
for(int i=0; i<menu1.length(); i++){
lcd.print(menu1*);*

  • delay(150);*
  • }*
  • // Da ora in poi voglio utilizzare il metodo autoscroll()*
  • lcd.setCursor(20,0);*
  • lcd.autoscroll();*
  • for(int i=0; i<menu2.length(); i++){*
    _ lcd.print(menu2*);_
    _
    delay(150);_
    _
    }*_

* // DA QUI IN POI I CARATTERI SUCCESSIVAMENTE STAMPATI PRESENTANO IL PROBLEMA SOPRA INDICATO*

* lcd.setCursor(20,0);*
* for(int i=0; i<menu3.length(); i++){*
_ lcd.print(menu3*);
delay(150);
}
.
.
.
.
lcd.setCursor(20,0);
for(int i=0; i<menu13.length(); i++){
lcd.print(menu13);
delay(150);
}*_

* lcd.noAutoscroll();*
}

Non so spiegarti il motivo... però io quando dovevo scrivere molti caratteri usavo questo metodo: (scusa se c'è qualche errore lo sto scrivendo al momento, servepiù da spunto)

//includi la libreria e inizializzi il display
int Cursor = 0;
while(qui gli metti quello che vuoi )
{
   lcd.setCursor(0,Cursor);
   lcd.print("la frase che vuoi");
   delay(il tempo che vuoi);
   lcd.clear();
   Cursor=Cursor - 1;
   if(Cursor < ( numero di lettere più spazi , quindi quando ha visualizzato tutte le lettere))
     {
         Cursor=0;
     }
}

Se non sbaglio dovrebbe funzionare,io avevo fatto una cosa del genere ma non mi ricordo bene.Spero di esserti stato di aiuto

Giorado, hai dimenticato

lcd.begin(20, 2);

Va inserito prima di lcd.clear.
Ciao

MGuruDC:
Giorado, hai dimenticato

lcd.begin(20, 2);

Va inserito prima di lcd.clear.
Ciao

A dir la verità andrebbe inserito nel setup(), una volta sola. Sarebbe meglio. Tanto, il display resta sempre quello per tutto il tempo, mica lo cambi a metà dello sketch :wink:

A dir la verità andrebbe inserito nel setup(), una volta sola. Sarebbe meglio. Tanto, il display resta sempre quello per tutto il tempo, mica lo cambi a metà dello sketch :wink:

Infatti il suo lcd.clear è nel setup...

Ah, vero. Il primo codice NON l'avevo neanche guardato perché senza formattazione era illeggibile. E nella sezione che ha postato non c'era scritto "void setup".