ciao a a tutti stavo cercando di realizzare un programmino che mi cambiasse la scritta sull'lcd (16x2) quando veniva premuto un bottone.
Non sono riuscito a cambiare la scritta perche mi sovrascriveva la nuova scritta. Usando l'if quando devo mettere lcd clear?
ecco il mio sketch
#define BUTTON 7
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int val = 0;
int vecchio_val = 0;
int stato = 0;
void setup()
{
lcd.begin(16, 2);
}
void loop() {
val = digitalRead(BUTTON);
if ((val == HIGH) && (vecchio_val == LOW))
{
stato = 1 - stato;
}
vecchio_val = val;
if (stato == 1) {
lcd.print("ciao a tutti");
lcd.setCursor(0, 2);
lcd.print("mi chiamo arduino");
lcd.setCursor(0, 1);
}
else {
lcd.print("buongiorno");
lcd.setCursor(0, 2);
lcd.print("mi chiamo arduino");
lcd.setCursor(0, 1);
}
}
Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.
La loop() viene eseguita di continuo, la clear puoi metterla prima dell'if(stato==1).
Credo però che vedrai un pò di lampeggio dello schermo.
Tra if ed else, le 2 righe che scrivono "mi chiamo arduino" sono itentiche, potresti spostarle dopo la if:
lcd.setCursor(0, 1);
if (stato == 1) {
lcd.print("ciao a tutti");
}
else {
lcd.print("buongiorno");
}
lcd.setCursor(0, 2);
lcd.print("mi chiamo arduino");
P.S. un consiglio, quando hai finito di scrivere il codice, premi CTRL+T per fare indentazione automatica
nid69ita:
La loop() viene eseguita di continuo, la clear puoi metterla prima dell'if(stato==1).
Credo però che vedrai un pò di lampeggio dello schermo.
Tra if ed else, le 2 righe che scrivono "mi chiamo arduino" sono itentiche, potresti spostarle dopo la if:
P.S. un consiglio, quando hai finito di scrivere il codice, premi CTRL+T per fare indentazione automatica
però non funziona ancora adesso mi appare solo la scritta "buongiorno" e quando premo il bottone non cambia stato forse perchè le variabili nello sketch non sono state cambiate quindi mi ripete in modo ciclico solo l'else e non mi prende in considerazione l'if. Dov'è l'errore?
Poi non è sempre obbligatorio usare lcd.clear ();
Nel tuo caso riscrivi solo una riga, quindi la riga precedente di 12 caratteri DEVE essere rimpiazzata con una riga con gli stessi caratteri per sovrascriverla COMPLETAMENTE.
Aggiungendo un paio di spazi dopo "buongiorno" il risultato è lo stesso ma risparmi una istruzione e non vedi il veloce sfarfallamento dello schermo dovuto alla clear.
void loop() {
val = digitalRead(BUTTON);
if ((val == HIGH) && (vecchio_val == LOW))
{
stato = 1 - stato;
}
vecchio_val = val;
if (stato == 1) {
lcd.setCursor(0, 1);
lcd.print("ciao a tutti");
}
else {
lcd.setCursor(0, 1);
lcd.print("buongiorno ");
}
lcd.setCursor(0, 2);
lcd.print("mi chiamo arduino");
}