Библиотека Time, Timezone, UTC
- Войдите на сайт для отправки комментариев
Вопрос, господа! Существует такая проблема: я с модуля GPS получаю время, каждую минуту синхронизирую RTC:
void SyncRTC_GPS() {
tm.Hour = gps.time.hour();
tm.Minute = gps.time.minute();
tm.Second = gps.time.second();
Serial.println("Sync TIME complit ");
tm.Day = gps.date.day();
tm.Month = gps.date.month();
tm.Year = tmYearToCalendar(gps.date.year());
Serial.println("Sync Date complit ");
RTC.write(tm);
}
Далее с RTC беру время и вывожу на дисплей пока видны спутники на горизонте (соответственно оно в UTC).
Каким образом можно сделать корректное смещение часового пояса, что бы учесть пограничные значения для перевода Даты?
Пробовал костыль - подключать библиотеку Time (что бы использовать контроллер в качестве посредника подсчета времени и библиотеки Timezone для смещения времени ), однако что то с библиотекой Time пошло не так.
Примеры из комплекта библиотеки Time не работают (например при получении времени из RTC выводится "9:55:46 16 1 1984", хотя при обращении к RTC через read , т.е. напрямую
if (RTC.read(tm)) { // выводим время с RTC на дисплей
writeRegistersInt(8, tm.Hour);
writeRegistersInt(11, tm.Minute);
writeRegistersInt(14, tm.Second);
время выводится нормально. Куда копать? или какой еще есть способ из UTC получить корректную дату/время в любом часовом поясе. Версия ArIde 1.8.12 библиотеки с гитхаба самые свежие))
UTC +/- offset -> localtime() из avrlibc
https://www.nongnu.org/avr-libc/user-manual/group__avr__time.html
не совсем прозрачное решение для меня.. но все же что с библиотекой TIME
только что удалил все библиотеки из папки C:\Users\user\Documents\Arduino\libraries
переустановил ИДЕ
библиотеки загрузил не zip архивами а через "управление библиотеками"
#include <TimeLib.h> #include <Wire.h> #include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t void setup() { Serial.begin(9600); while (!Serial) ; // wait until Arduino Serial Monitor opens setSyncProvider(RTC.get); // the function to get the time from the RTC if(timeStatus()!= timeSet) Serial.println("Unable to sync with the RTC"); else Serial.println("RTC has set the system time"); } void loop() { if (timeStatus() == timeSet) { digitalClockDisplay(); } else { Serial.println("The time has not been set. Please run the Time"); Serial.println("TimeRTCSet example, or DS1307RTC SetTime example."); Serial.println(); delay(4000); } delay(1000); } void digitalClockDisplay(){ // digital clock display of the time Serial.print(hour()); printDigits(minute()); printDigits(second()); Serial.print(" "); Serial.print(day()); Serial.print(" "); Serial.print(month()); Serial.print(" "); Serial.print(year()); Serial.println(); } void printDigits(int digits){ // utility function for digital clock display: prints preceding colon and leading 0 Serial.print(":"); if(digits < 10) Serial.print('0'); Serial.print(digits); }указанный код все равно возвращает фигню: "11:56:28 16 1 1984"
Написать свою библиотеку с часовыми поясами.
Только что то мне подсказывает, что это не влезет в Ардуино.
но все же что с библиотекой TIME
О какой библиотеке речь? Вы что-то говорите, говорите, но никто ведь, кроме Вас не знает что Вы имеете в виду.
указанный код все равно возвращает фигню: "11:56:28 16 1 1984"
1. Почему это фигня?
2. А что он должен возвращать?
речь идет об этой библиотеке https://playground.arduino.cc/Code/Time/
фигня это потому что вторым скетчем я проверяю дату и время в часах:
#include <Wire.h> #include <TimeLib.h> #include <DS1307RTC.h> void setup() { Serial.begin(9600); while (!Serial) ; // wait for serial delay(200); Serial.println("DS1307RTC Read Test"); Serial.println("-------------------"); } void loop() { tmElements_t tm; if (RTC.read(tm)) { Serial.print("Ok, Time = "); print2digits(tm.Hour); Serial.write(':'); print2digits(tm.Minute); Serial.write(':'); print2digits(tm.Second); Serial.print(", Date (D/M/Y) = "); Serial.print(tm.Day); Serial.write('/'); Serial.print(tm.Month); Serial.write('/'); Serial.print(tmYearToCalendar(tm.Year)); Serial.println(); } else { if (RTC.chipPresent()) { Serial.println("The DS1307 is stopped. Please run the SetTime"); Serial.println("example to initialize the time and begin running."); Serial.println(); } else { Serial.println("DS1307 read error! Please check the circuitry."); Serial.println(); } delay(9000); } delay(1000); } void print2digits(int number) { if (number >= 0 && number < 10) { Serial.write('0'); } Serial.print(number); }этот код возвращает вполне корректное время, котороя я загрузил в часы
соответственно должен возвращать после синхронизации так же текущее время "23:27:56 22 02 2020"
Блин, ну про вторую библиотеку Вы не сказали, где Вы её взяли, так что ... В общем, я взял вот эти библиотеки:
1. https://github.com/PaulStoffregen/DS1307RTC
2. https://github.com/PaulStoffregen/Time
Скопировал Ваш код из #2 и получил следующее
Проблемы не вижу.
P.S. неужели так трудно сказать, где взял библиотеки? Сколько раз уж было - трахаешься-трахаешься, а там всё совсем другое!
а что непонятного в фразе библиотеки загрузил не zip архивами (не качал с githaba) а через "управление библиотеками"... скорее всего оттуда и тянет.
удалил все библиотеки.. поставил с гитхаба, все тоже самое
Блин, ну про вторую библиотеку Вы не сказали, где Вы её взяли, так что ... В общем, я взял вот эти библиотеки:
1. https://github.com/PaulStoffregen/DS1307RTC
2. https://github.com/PaulStoffregen/Time
Скопировал Ваш код из #2 и получил следующее
Проблемы не вижу.
P.S. неужели так трудно сказать, где взял библиотеки? Сколько раз уж было - трахаешься-трахаешься, а там всё совсем другое!
у вас версия ide среды какая?
а что непонятного в фразе библиотеки загрузил не zip архивами (не качал с githaba) а через "управление библиотеками"... скорее всего оттуда и тянет.
Непонятно, где мне взять именно такие библиотеки, как у Вас, а не какие-то другие.
В правилах форума однозначно сказано: "При использовании сторонних библиотек (т.е. отсутствующих сразу после инсталяции ИДЕ) - ссылки на них обязательны"
Вообще, если кто-то хочет Вам помочь - не надо создавать ему дополнительных трудностей, это редко приводит к хорошему результату.
у вас версия ide среды какая?
1.8.10
Поскольку я не вижу Вашей проблемы и не могу сам найти в чём там дело, я могу рассказать Вам как самому найти ошибку, но это будет не быстро "шаг за шагом" и Вы должны делать точно то, что я скажу и говорить мне результаты. Надо?
И, кстати, если будут ещё замечания насчёт того, что "я требую чего-то не того, ненужного и вообще "неправильно помогаю"", я ухожу из темы. Пусть Вам помогает тот, кто правильно это будет делать.
сейчас запустил билиотеки под версией arduino-1.5.4 и все заработало. Евгений прошу прощения если был резок.
Хорошего дня!
PS на 1.8.10 тоже прекрасно работает