lcd.print

Salve a tutti, ho trovato un semplice programma che con un modulo Ds3231RTC misuro l'ora, la data e visualizziamo il tutto su uno schermo lcd 16x2. Il programma fa visualizzare sulla prima riga dello schermo l'ora e sulla seconda la data.
La mia domanda é: si potrebbe fare in modo che sia l'ora sia la data vengano scritte e visualizzate sulla prima riga del display alternandosi ogni 5 secondi?

Codice:

#include <DS3231.h>
#include <LiquidCrystal.h> // includes the LiquidCrystal Library 
DS3231  rtc(SDA, SCL);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7) 

void setup() { 
rtc.begin(); // Initialize the rtc object
lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display } 
}

void loop() { 
lcd.setCursor(0,0);
lcd.print("Ora:  ");
lcd.print(rtc.getTimeStr());

lcd.setCursor(0,1);
lcd.print("Data: ");
lcd.print(rtc.getDateStr());

delay(1000); 
}

Prima di tutto, essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ...

... poi, in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Grazie,

Guglielmo

Okay fatto

Coumunque ho risolto il problema :slight_smile: :slight_smile:

Mauro99:
Coumunque ho risolto il problema :slight_smile: :slight_smile:

Bene ...
... dato che può essere d'aiuto a qualcuno con il tuo stesso problema ... condividi la soluzione :slight_smile:

Guglielmo

Per cambiare ogni volta il dato da visualizzare su di un linea del display basta semplicemente:
-scrivere il primo dato da visualizzare seguito dal tempo che vogliamo che rimanga sullo schermo
-inserire una riga senza niente (spazi)
-inserire il secondo dato che vogliamo visualizzare (sempre sulla stessa riga del display) seguito dal tempo che vogliamo che rimanga sullo schermo
-azzerare di nuovo la riga con gli spazi

codice completo:

#include <DS3231.h>
#include <LiquidCrystal.h> // includes the LiquidCrystal Library 
DS3231  rtc(SDA, SCL);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7) 
void setup() { 
 rtc.begin(); // Initialize the rtc object
 lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display } 
}
void loop() { 
  
 lcd.setCursor(0,0);                   //imposto su che riga scrivere (prima)
 lcd.print("Ora : ");
 lcd.print(rtc.getTimeStr());
 delay(5000);                            //tempo di visualizzazione dell'ora
 
 lcd.setCursor(0,0);
 lcd.print("                  ");         //azzero la prima riga del display
 
 lcd.setCursor(0,0);
 lcd.print("Data: ");
 lcd.print(rtc.getDateStr());
 delay(3000);                            //tempo di visualizzazione della data
 
lcd.setCursor(0,0);
lcd.print("                   ");

}

se vuoi inserendo lcd.clear() ti eviti di dover riposizionare il cursore alle coordinate 0,0 e a cancellare la riga con gli spazi vuoti :wink:

LCD clear é lento. È piú veloce scrivere sempre il numero massimo di caratteri. Se uno string é troppo corto basta stampare dei spazi vuoti.

Ciao Uwe

aaah non la sapevo questa... grazie!