[RISOLTO] Cambiare scritta su LCD con pulsante

Buongiorno a tutti, chiedo scusa in anticipo se, molto probabilmente, sto sbagliando qualcosa nella creazione di questo nuovo topic.
Premetto che sono alle prime armi con Arduino e che pian piano sto cercando di provare a creare qualche piccolo programmino per poi in futuro essere in grado di unire il tutto per creare un progetto un pò più complesso.
Ora come ora vorrei creare un piccolo progettino che mi permetta, mediante l’uso di un LCD, un pulsante, una fotoresistenza e un sensore di temperatura, di poter visualizzare su LCD i diversi valori dei due sensori, potendomi spostare da un valore all’altro pigiando un bottone.
In poche parole alla prima pressione del pulsante vorrei visualizzare su LCD il valore letto dal sensore di temperatura, schiacciando un’ altra volta sul pulsante vorrei leggere il valore della fotoresistenza e infine schiacciando una terza volta vorrei ri far partire da zero il conteggio delle pressioni del pulsante e quindi ricominciare da capo.
Ho cercato in internet alcuni Sketch che usassere “Switch” e “case” per poi poterli riadattare all’utilizzo che vorrei farne io.
Purtroppo ho potuto testare il codice solo su tinkercad e non fisicamente, ma già da qui mi da dei problemi, non riesco a passare da una schermata all’altra usando il pulsante.
Chiedo aiuto a voi per cercare di capire gli errori che sto commettendo.
Vi ringrazio in anticipo.

/* programma che permette di leggere su LCD i valori di sensore di temperatura e valore della luminosità letto da un fotoresistore, passando da un valore all'altro usando un pulsante */

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int temperatura = 0;
int temp = 0;

int button = 13;
int state_button = 0;
int count_button = 0;
int lastState_button = 0;


void setup() {
  
  pinMode(button, INPUT);
  lcd.begin(16, 2);
  lcd.print("Fiori");
  delay(500);
  
}

void loop() {
  
  state_button = digitalRead(button);                   //leggo lo stato del bottone
  
  if (state_button != lastState_button){  
    if (state_button == HIGH){
      count_button++;                                   //inizio il contaggio delle pressioni del bottone
      
      switch (count_button){              
        
        case 1:                                         //se il bottone viene premuto una volta, stampero su LCD il       valore letto dal sensore della temperatura pin A0
 
         temperatura = analogRead(A0);
         temp = ((temperatura * 0.00488) -0.5)/0.01;    //trasformo il valore in gradi C°
  
         lcd.clear();
         lcd.setCursor(0, 0);
         lcd.print(temp);
         lcd.print(" Gradi");
         delay(500);
         break;

 
      case 2:                                          //se il bottone viene schiacciato due volte, stampo su LCD il valore del fotoresistore 
         int luce = analogRead(A1);
         int lum = map(luce, 0, 1024, 0, 100);          //mappo il valore letto e lo trasformo in percentuale
        
         lcd.clear();
         lcd.setCursor(0, 0);
         lcd.print(lum);
         lcd.print(" %");
         delay(500);
         break;
        
      }
    }
  }
  
  lastState_button = state_button;
  
  if(count_button > 2){                               //se il pulsante viene schiacciato più di due volte stampo "fine" su LCD e con i comandi sottostanti faccio ripartire il ciclo.
    lcd.clear();
    lcd.print("Fine");
    delay(1000);
  }
    state_button = 0;
    lastState_button = 0;
    count_button = 0;
    lcd.clear();
    lcd.print("Riavvio");
    
  
}

Hai azzerato le variabili fuori dal ciclo if.

Grazia Arco per la risposta.
Purtroppo anche se le variabile le inculdo nel ciclo if, il programma non funziona.
Mi scrive su LCD la scritta impostata nel setup ("Fiori") ma schiacciando il pulsante non mi mostra i valori dati dai sensori e rimane sempre sulla schermata iniziale.

Non capisco che senso abbia usare questa riga.
Per me non serve a niente.

if (state_button != lastState_button){

credo che forse manca "l'associazione"
lastState_button != state_button

"Non capisco che senso abbia usare questa riga.
Per me non serve a niente."

In teoria, non so se correttamente, ma ho usato questa scrittura per dirgli che se lo stato attuale del pulsante è differente dallo stato precedente e se lo stato ora è HIGH, aumento il contaggio count_button.

Ripeto, non so se l'ho fatto correttamente, anczi probabilmente no visto che non ottengo i risultati che vorrei.

prova a mettere questa nel loop. e poi li chiami dai vari case

temperatura = analogRead(A0);
         temp = ((temperatura * 0.00488) -0.5)/0.01;    //trasformo il valore in gradi C°
int luce = analogRead(A1);
         int lum = map(luce, 0, 1024, 0, 100);          //mappo il valore letto e lo trasformo in percentuale

digital_joker:
In teoria, non so se correttamente, ma ho usato questa scrittura per dirgli che se lo stato attuale del pulsante è differente dallo stato precedente e se lo stato ora è HIGH, aumento il contaggio count_button.

Questo è giusto, si può compattare in meno righe ma è giusto.

L'errore sono gli azzeramenti delle variabili a fine codice.

In teoria, non so se correttamente, ma ho usato questa scrittura per dirgli che se lo stato attuale del pulsante è differente dallo stato precedente e se lo stato ora è HIGH, aumento il contaggio count_button.

[/quote]
Allora la quella riga di codice deve rimanere.

Claudio_FF:
Questo è giusto, si può compattare in meno righe ma è giusto.

L'errore sono gli azzeramenti delle variabili a fine codice.

Ho provato ad eliminare anche gli azzeramenti delle variabili, però niente.
Volevo quasi provare a riscrivere lo sketch usando gli if al posto dello switch però mi piacerebbe capire perchè non riesco a farlo funzionare così.

 if(count_button > 2){                               //se il pulsante viene schiacciato più di due volte stampo "fine" su LCD e con i comandi sottostanti faccio ripartire il ciclo.
    lcd.clear();
    lcd.print("Fine");
    delay(1000);
  }
    state_button = 0;
    lastState_button = 0;
    count_button = 0;
    lcd.clear();
    lcd.print("Riavvio");

L'azzeramento delle variabili devi inserirle all'interno di if(count_button > 2){

Avevo già provato anche ad inserirlo ma non funziona ugualmente.
Ho provato ad inseririe la comunicazione con il serial monitor per vedere se mi stampa i conteggi del pulsante, però non li vede, come se non leggesse le pressioni del pulsante.

Il modo piu' semplice per risolvere questi problemi, è l'utilizzo del Serial.
Dopo aver configurato il Serial nel Setup puoi fare questo per esempio

void loop() {
 
  state_button = digitalRead(button);                   //leggo lo stato del bottone
  Serial.print("state_button = ");
  Serial.println(state_button);

Con questo puoi vedere se il pulsante funziona e se fa quello che vuoi.
Puoi aggiungere una cosa del genere per ogni punto cruciale del tu codice.
In questo modo si risolvono tantissimi problemi hardware e software.

savoriano:
Il modo piu' semplice per risolvere questi problemi, è l'utilizzo del Serial.
Dopo aver configurato il Serial nel Setup puoi fare questo per esempio

void loop() {

state_button = digitalRead(button);                  //leggo lo stato del bottone
  Serial.print("state_button = ");
  Serial.println(state_button);



Con questo puoi vedere se il pulsante funziona e se fa quello che vuoi.
Puoi aggiungere una cosa del genere per ogni punto cruciale del tu codice.
In questo modo si risolvono tantissimi problemi hardware e software.

Grazie!!

Ho provato ad aggiungerlo ed effettivamente non mi stampa niente del count_button.
Stasera se riesco provo a dare un occhiata di nuovo a tutto lo Sketch e a capire perchè non legge le pressioni del pulsante.

provo a dare un occhiata di nuovo a tutto lo Sketch

Puo' essere un problema hardware!

Grazie mille!

Effettivamente mi sono concentrato sul programma e non avevo fatto caso ad un collegamento sbagliato del pulsante.

Ora funziona tutto correttamente.

Grazie a tutti!