Go Down

Topic: Problema LCD i2c + RTC DS1307 (Read 385 times) previous topic - next topic

LeoTer01

Mar 05, 2018, 03:16 pm Last Edit: Mar 05, 2018, 03:29 pm by LeoTer01
Buongiorno,

sto cercando di creare un semplice orologio con Arduino UNO + uno schermo LCD i2c e un modulo RTC DS1307 i2c.

Il mio problema è che quando l'orario arriva a xx:xx:59, invece di tornare a xx:xx:00, scrive i primi 10 secondi di 10 in 10 (xx:xx:09, xx:xx:19, xx:xx:29, così via fino a xx:xx:99, xx:xx:10, xx:xx:11) poi torna normale. Questo succede anche con i primi 10 minuti di ogni ora.
Ciò però non accade sul monitor seriale.

Ecco il codice:

Code: [Select]
#include <PCF8574_HD44780_I2C.h>
#include <Wire.h>
#include "RTClib.h"
 
RTC_DS1307 RTC;

PCF8574_HD44780_I2C lcd(0x27,16,2);

void setup () {
    lcd.init();
    lcd.backlight();
  
    Wire.begin();
    RTC.begin();
}
 
void loop () {
    DateTime now = RTC.now();

    lcd.setCursor(0,0);
    lcd.print(now.day(), DEC);
    lcd.setCursor(2,0);
    lcd.print('/');
    lcd.setCursor(3,0);
    lcd.print(now.month(), DEC);
    lcd.setCursor(5,0);
    lcd.print('/');
    lcd.setCursor(6,0);
    lcd.print(now.year(), DEC);
    
    lcd.setCursor(0,1);
    lcd.print(now.hour(), DEC);
    lcd.setCursor(2,1);
    lcd.print(':');
    lcd.setCursor(3,1);
    lcd.print(now.minute(), DEC);
    lcd.setCursor(5,1);
    lcd.print(':');
    lcd.setCursor(6,1);
    lcd.print(now.second(), DEC);
}


Ringrazio in anticipo chi mi possa aiutare poichè nonostante ho cercato in internet non ho trovato niente a riguardo.

Standardoil

Devi prevedere il caso che il secondo, il minuto, magari anche,l'ora o il giorno siano minori di dieci, che risulterebbero più corti quando stampati.
Non va di dieci in dieci, vedi solo il 9 che era alla fine del 59 e che non è stato coperto dalla nuova scrittura. Soluzione?
Allunghi le svritte, cancelli il display, come sei cpmodo
Prima legge di Nelson (che sono io): La risposta giusta si può ottenere solo dalla domanda giusta, domande sbagliate danno risposte inutili

Non bado a studenti, che copino altrove

Hai problema-Ti domando-Non rispondi: Non ti serve più

LeoTer01

Grazie mille!
Non ci avevo proprio pensato... :D

bitbank

Una soluzione più semplice:

Code: [Select]


byte cTemp[16];

sprintf(cTemp, "%02d/%02d/%04d", now.day(), now.month(), now.year());
lcd.setCursor(0,0);
lcd.print(cTemp);

sprintf(cTemp, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.setCursor(0,1);
lcd.print(cTemp);

Library? We don't need no stinkin' library...we write our own

LeoTer01

Grazie mille....ho aggiornato il codice ed è tutto funzionante!

Go Up