Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

orario

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] orario

Messaggioda Foto Utenteapollo17 » 17 apr 2020, 9:31

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());
    }
}
Ultima modifica di Foto Utentexyz il 17 apr 2020, 9:52, modificato 1 volta in totale.
Motivazione: Usa per il codice i tag [code] ... [/code]
Avatar utente
Foto Utenteapollo17
81 1 2 6
Stabilizzato
Stabilizzato
 
Messaggi: 324
Iscritto il: 30 lug 2017, 11:59

0
voti

[2] Re: orario

Messaggioda Foto Utentepgiagno » 17 apr 2020, 14:08

È 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.
Avatar utente
Foto Utentepgiagno
503 3 7
Stabilizzato
Stabilizzato
 
Messaggi: 363
Iscritto il: 5 gen 2015, 21:27

0
voti

[3] Re: orario

Messaggioda Foto Utenteapollo17 » 17 apr 2020, 18:06

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
Avatar utente
Foto Utenteapollo17
81 1 2 6
Stabilizzato
Stabilizzato
 
Messaggi: 324
Iscritto il: 30 lug 2017, 11:59

0
voti

[4] Re: orario

Messaggioda Foto Utenteapollo17 » 17 apr 2020, 19:04

grazie funziona con :
if(now.second()<10) lcd.print('0');

ad esempio prima della stampa secondi,
Avatar utente
Foto Utenteapollo17
81 1 2 6
Stabilizzato
Stabilizzato
 
Messaggi: 324
Iscritto il: 30 lug 2017, 11:59

0
voti

[5] Re: orario

Messaggioda Foto Utenteapollo17 » 19 apr 2020, 10:36

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é?
Avatar utente
Foto Utenteapollo17
81 1 2 6
Stabilizzato
Stabilizzato
 
Messaggi: 324
Iscritto il: 30 lug 2017, 11:59


Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti