lcd che sfarfalla

ciao, ho seguito diverse guide e tutto ok… ora ho provato ad unirne due ed iniziano i problemi…

ecco il codice:

#include <LiquidCrystal.h>
#define BUTTON 7                                  // pin di input a cui è collegato il pulsante  
#define LED 13                                    // LED collegato al pin digitale 13  
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// Variabili  
int ContatorePulsantePremuto = 0;                   // conta il numero di volte che il pulsante è premuto buttonPushCounter   
int StatoPulsante = 0;                              // stato corrente del pulsante  
int StatoPulsantePrecedente = 0;                    // stato precedente del pulsante  

  
void setup() {  
  pinMode(BUTTON, INPUT);                           // imposta il pin digitale come input  
  pinMode(LED, OUTPUT);                             // imposta il pin digitale come output  
  Serial.begin(9600);                               // apre la porta seriale e la inizzializza a 9600 bps  
}  
  
void loop() {  
  StatoPulsante = digitalRead(BUTTON);              // legge il valore dell'input e lo conserva  
  lcd.begin(16, 2);
  lcd.print("Programma 1"); 
  if (StatoPulsante != StatoPulsantePrecedente) {   // compara lo stato del pulsante attuale con il precedente  
        delay(500); 
        if (StatoPulsante == HIGH) {                    // se lo stato è cambiato incrementa il contatore  
      // se lo stato corrente è alto, il pulsante è passato da off a on  
      ContatorePulsantePremuto++;  
  
      switch (ContatorePulsantePremuto) {  
      case 1:  // controlla se il pulsante è stato premuto una volta  
        Serial.println("on");                                // stampa sulla console "on"  
        Serial.print("Ciclo avviato ");    // stampa sulla console "numero di volte tasto premuto:"  
        Serial.println(ContatorePulsantePremuto, DEC);       // stampa il numero di volte che il pulsante è stato premuto  
        Serial.println("off");         // stampa sulla console "off"   
        lcd.setCursor(0, 1);  
        lcd.print("ciclo avviato"); 
        break;  
      case 2:  // controlla se il pulsante è stato premuto due volte  
        Serial.println("on");                                // stampa sulla console "on"  
        Serial.print("Avvio 1:  ");    // stampa sulla console "numero di volte tasto premuto:"  
        Serial.println(ContatorePulsantePremuto, DEC);       // stampa il numero di volte che il pulsante è stato premuto  
        Serial.println("off");                               // stampa sulla console "off"  
        break;  
      case 3:  // controlla se il pulsante è stato premuto tre volte  
        Serial.println("on");                                // stampa sulla console "on"  
        Serial.print("Avvio 2:  ");    // stampa sulla console "numero di volte tasto premuto:"  
        Serial.println(ContatorePulsantePremuto, DEC);       // stampa il numero di volte che il pulsante è stato premuto  
        Serial.println("off");                               // stampa sulla console "off"  
        break;  
      case 4:  // controlla se il pulsante è stato premuto quattro volte  
        Serial.println("on");                                // stampa sulla console "on"  
        Serial.print("Avvio 3:  ");    // stampa sulla console "numero di volte tasto premuto:"  
        Serial.println(ContatorePulsantePremuto, DEC);       // stampa il numero di volte che il pulsante è stato premuto  
        Serial.println("off");                               // stampa sulla console "off"  
        break;  
      }  
    }   
  }  
  
  // salva lo stato corrente nella variabile che indica lo stato precedente per il loop successivo   
  StatoPulsantePrecedente = StatoPulsante;  
  
  // controlla se il pulsante è stato premuto quattro volte se vero indica che è finito il ciclo  
  // il led lampeggia 2 volte per 50 millisecondi  
  // vengono inizializzate nuovamente le variabili  
  // si riavvia il ciclo  
  
  if (ContatorePulsantePremuto > 4) {  
    Serial.println("fine ciclo");  
    for (int x=0; x<10; x++) {                                 // lampeggia per 10 volte  
      digitalWrite(LED, HIGH);                                 // accende il LED    
      delay(50);                                               // aspetta 50 millisecondi    
      digitalWrite(LED, LOW);                                  // spegne il LED    
      delay(50);                                               // aspetta 50 millisecondi  
    }  
    // inizializzazione delle variabili  
    ContatorePulsantePremuto = 0;  
    StatoPulsante = 0;  
    StatoPulsantePrecedente = 0;  
    Serial.println("mi riavvio");                            // stampa sulla console "mi riavvio"  
  }  
}

Il problema è che al “case 1” dovrei vedere vedere sulla seconda riga del display “ciclo avviato” come lo vedo via serialprint ma invece sul display vedo solo la prima riga “Programma 1” che sfarfalla continuamente e vedo in bora il testo della prima riga ripetersi sulla seconda… nonostante le variazioni funzionino via seriale, il display è sempre uguale.

Il problema è nel codice?

grazie ancora!!

prova a fare

lcd.clear();

Serve a cancellare tutto quello che hai scritto sopra... Stai attento che se hai dei caratteri da far rimanere, devi riscriverli...

Ho provato a scriverlo prima di lcd.cursor ma non cambia nulla... Devo metterlo dopo il primo if ?