Sfarfallio LCD Display

Salve amici di Arduino , quando richiamo Attraverso la funzione
Loop lo switch var , ho uno sfarfallio nel lcd . Dovuto al richiamo
continuo esiste un metodo per richiamare una sola volta esempio
Menu1, Menu2 nel mio caso grazie .

switch (var) {
  case 1:
    lcd.setCursor(0, 0);
    lcd.print("Menu1");
    break;
  case 2:
cd.clear(); //Display cancellare
lcd.setCursor(0, 0);
lcd.print("Menu2");
    break;
  default:

    break; 
}

NON pulire tutto il display se veramente non serve, posizionati e sovrascrivi.

Guglielmo

Grazie io credevo che lo sfarfallio era dovuto al richiamo continuo del ciclo Loop,
oltre allo sfarfallio i caratteri alcuni segmenti diventano scuri .

Forse dovuta a qualche libreria che adopero nel mio caso, MobaTools.h
che contrasta ?

Per il contrasto negli LCD grafici di solito c'è un trimmer.
Non mi risulta che sia possibile farlo via software.

Beh oltre a non fare sempre Clear() si, può essere anche quello ma dipende da come stai gestendo il display ossia se nel loop, che viene eseguito migliaia di volte al secondo, continuamente riscrivi tutto è ovvio che comunque oltre a perdere inutilmente tempo a riscrivere esattamente le stesse cose. Se parli di un menu, scrivilo solo quando cambi pagina/voce di menu.
Per indicazioni più precise però dovresti postare tutto il tuo codice o almeno tutta la parte del loop() dove gestisci il display.

Nel caso il problema fosse lcd.clear() e in genere la cattiva gestione del display, nel mio blog affronto la problematica.

Alla fine di quell'articolo c'è questo link dove grazie al simulatore online wokwi uso la board pi-pico 2040 connessa ad un display LCD. Ti consiglio di copiare lo sketch e testare con il tuo hardware se noti sfarfallio.

Considera che per ogni carattere inviato al display ci vogliono circa 0.5ms, se usi il collegamento 4 bit.

byte oldVar = 255;
switch (var) {
  case 1:
   if (oldVar != var) {
      lcd.setCursor(0, 0);
      lcd.print("Menu1");
      oldVar = var;
   }
    break;

Stessa cosa per gli altri case.

Ciao.

Grazie per l’aiuto , sono andato nel tuo blog .
Non so se ho capito creo un array di caratteri, ad esempio --- char lamiasprintBuff[13]--
quando poi adopero la funzione --- sprintf (lamiasprintBuff,"il mio testo1")-- ed di seguito stampo nel LCD , se dovuto a qualche evento voglio cambiare testo sprintf (lamiasprintBuff," testo2")
e stampo nel LCD non mi devo preoccupare di sovrascrivere ho cancellare nel LCD apparirà
il messaggio --- testo2---

Si quasi ci sei ma meglio che fai un esempio di codice e lo posti.

No, manca la stringa di formattazione.

Comunque non basta sprintf. Come ti hanno già detto, inviare ad ogni ciclo di loop la scritta "Menu1" è poco efficiente ed infatti ho modificato il tuo switch case in modo che stampi solo quando le due variabili sono diverse oldVar != var.

// questa dichiarazione e inizializzazione è poco comprensibile per un principiante, scusa non ho saputo fare di meglio.
const char *menu[] = {"Menu1 ", "Menu2 ", "Menu10"};
byte menuIndex; 
byte oldMenuIndex = 255;

void loop() {
    if (menuIndex != oldMenuIndex) {
        lcd.setCursor(0, 0);
        lcd.print(menu[menuIndex]);
        oldMenuIndex = menuIndex;
        
    }
    if (millis() - saveMillis > 500) {
        saveMillis = millis();
        menuIndex++;
        if (menuIndex > 3)
            menuIndex = 0;
    }
}

Manca il setup, aggiungilo tu.

Ciao.