orologio con modulo rtc con lcd problema help

ciao ragazzi, vi chiedo un piccolo aiuto, ho assemblato questo orologio ma non capisco il motivo il perché quando spengo l'arduino l'orologio e il calendario rimane fermo. se carico lo sketchup l'ora e il calendario si regola da solo in base al'ora e alla data del PC, fin qui va bene ma perche quando lo spengo rimane tutto congelato al giorno precedente? chi mi può aiutare?

ps. la batteria e carica

mi chiedo ma nel modulo rtc c'è un pin bat come va utilizzato?

lo sketchup che carico e il seguente

#include "Wire.h"
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 

RTC_DS1307 RTC;

void setup ()
{
 lcd.begin(20, 4);
 Serial.begin(9600);
 Wire.begin();
 RTC.begin();
 // Se l'ora e' errata la aggiorna
 // con quella del computer
 DateTime OraRTC = RTC.now();
 DateTime OraPC = DateTime(__DATE__, __TIME__);
 if (OraRTC.unixtime() < OraPC.unixtime())
   Serial.println("L'RTC e' indietro! Lo aggiorno con quello del PC!");
 RTC.adjust(OraPC);
 if (! RTC.isrunning())
   lcd.print("RTC is NOT running!");
}

void printShortDateTime(DateTime now)
{
 char buffer[25] = {'\0'};
 sprintf(buffer, "%02u/%02u/%u %02u:%02u:%02u",
         now.day(), now.month(), now.year(),
         now.hour(), now.minute(), now.second());
}

void printLongDateTime(DateTime now)
{
 const char* days[] =  {  "Lunedi", "Marted", "Mercol","Gioved'", "Venerd", "Sabato", "Domeni"
                       };
 const char* months[] = { "Gennaio", "Febbraio", "Marzo", "Aprile",
                          "Maggio", "Giugno", "Luglio", "Agosto",
                          "Settembre", "Ottobre", "Novembre  ", "Dicembre "
                        };
 char buffer[40];

 sprintf(buffer, "%s, %u %s %u %02u:%02u:%02u",
         days[now.dayOfWeek() - 1], 
         now.day(), 
         months[now.month() - 1], 
         now.year(),
         now.hour(), 
         now.minute(), 
         now.second());
         lcd.print(buffer);

}

void loop ()
{
 lcd.setCursor(0, 0);
 printLongDateTime(RTC.now());
 printShortDateTime(RTC.now());
 delay(1000);
}

>888vita: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post qui sopra (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

perche quando lo spengo rimane tutto congelato al giorno precedente?

Perchè hai lasciato nel setup() la parte che imposta l'orario al momento in cui lo compili

Commentala

 DateTime OraPC = DateTime(__DATE__, __TIME__);
 if (OraRTC.unixtime() < OraPC.unixtime())
   Serial.println("L'RTC e' indietro! Lo aggiorno con quello del PC!");
 RTC.adjust(OraPC);

brunello22:
Perchè hai lasciato nel setup() la parte che imposta l'orario al momento in cui lo compili

Commentala

 DateTime OraPC = DateTime(__DATE__, __TIME__);

if (OraRTC.unixtime() < OraPC.unixtime())
  Serial.println("L'RTC e' indietro! Lo aggiorno con quello del PC!");
RTC.adjust(OraPC);

ciao, scusami ma sono un principiante cosa intendi ho lasciato nel setup() ? in tutti gli sketchup c'è oppure mi sbaglio?

888vita:
ciao, scusami ma sono un principiante cosa intendi ho lasciato nel setup() ? in tutti gli sketchup c'è oppure mi sbaglio?

C'e' per la prima volta che lo usi, per "inizializzare/sincronizzare" l'ora con quella del momento della compilazione/upload. Poi non serve più.