Companheiros, estou tentando a duas semanas fazer o RTC Tiny 1307 ser estavel e não consigo. Testei varias rotinas e toda resultados parecidos. Recupera data e hora uma vez certo e outro errado.
====== Copilado em =======
Mar 10 2019 20:25:05
Ajustado horario RTC pela WEB
Variaveis usadas para acertar o RTC: 10.3.2019 — 22:24:31
Time das variables WEB: 10.3.2019 — 22:24:32
---------------------------
Data e Hora recuperado do RTC --> 10/3/2099 22:24:32
--------------------------
Time das variables WEB: 10.3.2019 — 22:24:33
---------------------------
Data e Hora recuperado do RTC --> 11/3/2099 23:25:33
--------------------------
Time das variables WEB: 10.3.2019 — 22:24:34
-------------**--------------
Data e Hora recuperado do RTC --> 10/3/2099 22:24:34
O codigo usado é este …
#include <WiFi.h>
#include “time.h”
#include “RTClib.h” // biblioteca RTC
RTC_DS1307 Rtc; // criado instancia Rtc
//struct tm t;
//time_t t_of_day;
const char* ssid = “********”;
const char* password = “”;
const char* ntpServer = “south-america.pool.ntp.org”;
const long gmtOffset_sec = -10800;
const int daylightOffset_sec = 3600;
int Websecond;
int Webminute;
int Webhour;
int Webday;
int Webmonth;
int Webyear;
int weekday;
long current;
//********************************************************
struct tm timeinfo;
time_t timeinfo_of_day;
//********************************************************
void printLocalTime()
{
if(!getLocalTime(&timeinfo)){
Serial.println(“Failed to obtain time”);
return;
}
//Serial.println(&timeinfo, “%A, %b %d %Y %H:%M:%S”);
Websecond = timeinfo.tm_sec;
Webminute = timeinfo.tm_min;
Webhour = timeinfo.tm_hour;
Webday = timeinfo.tm_mday;
Webmonth = timeinfo.tm_mon + 1;
Webyear = timeinfo.tm_year + 1900;
weekday = timeinfo.tm_wday +1;
Serial.print(“Time das variables WEB: “);
Serial.print(Webday);
Serial.print(”.”);
Serial.print(Webmonth);
Serial.print(".");
Serial.print(Webyear);
Serial.print(" — “);
Serial.print(Webhour);
Serial.print(”:");
Serial.print(Webminute);
Serial.print(":");
Serial.println(Websecond);
// ** Mostra no monitor serial a data e hora do RTC
DateTime tstamp = Rtc.now();
timeinfo.tm_year = tstamp.year()-1900;
timeinfo.tm_mon = tstamp.month(); // Month, 0 - jan
timeinfo.tm_mday = tstamp.day(); // Day of the month
timeinfo.tm_hour = tstamp.hour();
timeinfo.tm_min = tstamp.minute();
timeinfo.tm_sec = tstamp.second();
timeinfo.tm_isdst = -1; // Is DST on? 1 = yes, 0 = no, -1 = unknown
timeinfo_of_day = mktime(&timeinfo);
Serial.println("-------------**--------------");
Serial.print("Data e Hora recuperado do RTC --> ");
Serial.print(timeinfo.tm_mday, DEC);
Serial.print('/');
Serial.print(timeinfo.tm_mon, DEC);
Serial.print('/');
Serial.print(timeinfo.tm_year + 1900, DEC);
Serial.print(' ');
Serial.print(timeinfo.tm_hour, DEC);
Serial.print(':');
Serial.print(timeinfo.tm_min, DEC);
Serial.print(':');
Serial.print(timeinfo.tm_sec, DEC);
Serial.println();
Serial.println("-------------**-------------");
}
void setup()
{
Serial.begin(115200);
//connect to WiFi
Serial.printf(“Connecting to %s “, ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(”.”);
}
Serial.println(" CONNECTED");
//init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
//disconnect WiFi as it’s no longer needed
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
// ********************************************
// INICIA RTC
// ********************************************
Rtc.begin(); // Inicia RTC e copila com horario do computador
Serial.println("");
Serial.println("--------------------------");
Serial.println("====== Copilado em =======");
Serial.print(__DATE__);
Serial.print(" ");
Serial.println(__TIME__);
Serial.println("--------------------------");
Serial.println("");
if (!Rtc.isrunning()) {
Serial.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
Serial.println("RTC parado, vou ajustar com a hora da compilacao...");
Serial.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
Rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
Serial.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
Serial.println(" Ajustado horario RTC pela WEB");
Serial.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
Rtc.adjust(DateTime(Webyear - 1900, Webmonth, Webday, Webhour, Webminute, Websecond));
Serial.print(“Variaveis usadas para acertar o RTV: “);
Serial.print(Webday);
Serial.print(”.”);
Serial.print(Webmonth);
Serial.print(".");
Serial.print(Webyear);
Serial.print(" — “);
Serial.print(Webhour);
Serial.print(”:");
Serial.print(Webminute);
Serial.print(":");
Serial.println(Websecond);
}
void loop()
{
delay(1000);
printLocalTime();
}
Se alguem me ajudar, desde ja agradeço