Pagina 1 di 1

orario

MessaggioInviato: 17 apr 2020, 9:31
da apollo17
Ciao, sul seguente listato, ora e data ho due problemi primari e due secondari
il principale è come settare inizialmente la rtc sull orario esatto, poi nella visualizzazione dei secondi e minuti unità sparisce la seconda cifre mi spiego i seconti 07 o i minuti 07, li visualizza semplicenete 7 allineato a sx.
Il formato data inizia per anno mese giorno e non g/m/anno.

grazie
Codice: Seleziona tutto
#define LCD_ADDRESS 0x27            // Define LCD characteristics
#define LCD_ROWS 4
#define LCD_COLUMNS 20
#define LCD_BACKLIGHT 1             // backlight turned on

#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
#include <RTClib.h>                 // real time clock

LiquidCrystal_PCF8574 lcd(LCD_ADDRESS);         // LCD I2C
RTC_DS3231 rtc;

uint32_t rsyncTime = 0;              // time of last sync()
void setup(void)
{
    Serial.begin(57600);            // start serial port
    while (!Serial);                // wait to be ready
    lcd.begin(LCD_COLUMNS, LCD_ROWS);
    // backlight turned on
    lcd.setBacklight(LCD_BACKLIGHT);
    Serial.println(F("System is ready"));
    if (! rtc.begin()) {
        Serial.println("Couldn't find RTC Module");
        while (1);
    }
    if (rtc.lostPower()) {
        rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    }
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

    lcd.clear();
    lcd.print("Sistema Pronto");
    delay(5000);
}

void loop()
{
    static long this_sec;           // memory that hold temporary last second
    DateTime now = rtc.now();       // update the time
    // if one second difference
    if (now.secondstime() > this_sec) {
        // update the temporary data
        this_sec = now.secondstime();
        lcd.clear();
        lcd.print(now.year(), DEC);
        lcd.print('/');
        lcd.print(now.month(), DEC);
        lcd.print('/');
        lcd.print(now.day(), DEC);
        lcd.setCursor(0,1);
        lcd.print(now.hour(), DEC);
        lcd.print(':');
        lcd.print(now.minute(), DEC);
        lcd.print(':');
        lcd.print(now.second(), DEC);
        delay(500);
        // lcd.print(now.secondstime());
    }
}

Re: orario

MessaggioInviato: 17 apr 2020, 14:08
da pgiagno
È opportuno che tutti i #define seguano gli #include in modo da sovrascrivere eventuali definizioni di default con le attuali.

Le istruzioni
Codice: Seleziona tutto
    if (rtc.lostPower()) {
        rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    }
sono completamente inutili dato che tu COMUNQUE dopo esegui
Codice: Seleziona tutto
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

Per avere il display come vuoi tu devi modificare l'ordine delle print, così:
Codice: Seleziona tutto
        lcd.clear();
        lcd.print(now.day(), DEC);
        lcd.print('/');
        lcd.print(now.month(), DEC);
        lcd.print('/');
        lcd.print(now.year(), DEC);
        lcd.setCursor(0,1);
        lcd.print(now.hour(), DEC);
        lcd.print(':');
        lcd.print(now.minute(), DEC);
        lcd.print(':');
        lcd.print(now.second(), DEC);

Se vuoi mantenere gli spazi dei minuti e secondi inserendo degli zeri devi controllare se minuti e secondi sono minori di 10, in quel caso prima della print sul display devi inserire una print 0

Per la sincronizzazione di RTC guarda qua e anche qua

Ciao,
P.

Re: orario

MessaggioInviato: 17 apr 2020, 18:06
da apollo17
bene grazie Pgiagno, ok formato, ok cancellato riga inutile, ma sulla visualizzazione della zero mi da errore
ho messo prima di lcdprint giorno
if (number < 10)
lcd.print("0");
lcd.print(number);
sbaglio sicuramente

Re: orario

MessaggioInviato: 17 apr 2020, 19:04
da apollo17
grazie funziona con :
if(now.second()<10) lcd.print('0');

ad esempio prima della stampa secondi,

Re: orario

MessaggioInviato: 19 apr 2020, 10:36
da apollo17
solo problema settaggio rtc 3231 su display I2c, provati diversi programmi per settaggio da seriale, ma non riesco mai un settaggio al secondo. Poi se stacco alimentatore USB da PC e alimento il tutto con alimentatore a parte panche con batteria su rtc perde almeno un paio di minuti... perché?