Работа с временем и датой
- Войдите на сайт для отправки комментариев
Втр, 19/02/2013 - 16:30
Добрый день
Подскажите плз, есть ли стандартная библиотека для работы в Arduino с временем и датой?
Нужно сравнивать 2 набора значений дата+время: текущие, полученные из модуля часов ds1307 и значения, сохраненное ранее в eeprom. Ожидаемый результат операции - разница между ними в днях, часах,..
Нет нету. Есть библиотека для работы с ds1307.
В готовом виде наверно нет. То же задумался как сохранять и куда лог событий. Т.е. дату, время начала, продолжительность. Подскажите алгоритм, пожалуйста.
Посмотрите библиотеку Time http://playground.arduino.cc/Code/time
Работа с часами реального времени там описана.
Библиотеку Time посмотрел, спасибо.
Но не нашел там нужных мне методов для работы с временем и датой - например DateAdd, DateDiff
ребята и мне нужны алгоритмы нахождения разницы дат. А я планирую сохранять значение текущено времени в регистрах таймера, чтобы про просыпании контроллера посмотреть сколько времени прошло пока он спал, и сделать соответствующие коррекции на погрешность хода таймера.
Получаю время с часов DS1302. Мне надо знать когда будет 8 часов. Минуты и секунды не интересуют. Если я напишу
Будет работать? У меня компилируеться - но проверить не скоро смогу контроллера нет пока. Сомневаюсь получиться ли 800 если переменная getTimeStr() выводилась в сериал таким форматом 8:0:0. В общем я не знаю как преобразование в int поступает со знаками и числами.
Мне надо знать когда будет 8 часов.
получилось только так int h = hour(); Или должно без int работать? Соррри за глупый вопрос
Переменные
Или должно без int работать? Соррри за глупый вопрос
вопрос не глупый, а свидетельствующий о том, что ты плаваешь в программировании совсем.
без
Я только начинаю спасибо за помощь. Я весь код не писал.
void setup() {} void loop() {} есть конечно. int был условно не показан Вами как я понял
int был условно не показан Вами как я понял
и не должен был быть показан - подразумевается, что переменная была объявлена где-то выше.
и
область видимости
http://arduino.ru/Tutorial/Variables
Есть еще одна существенная разница:
в первом случае переменной h присваивается значение перед началом выполнения программы, а во втором - при каждом вызове CHEKTIME (Кстати, если это по-английски, то правильнее было бы CheckTime).
Есть еще одна существенная разница:
в первом случае переменной h присваивается значение перед началом выполнения программы, а во втором - при каждом вызове CHEKTIME (Кстати, если это по-английски, то правильнее было бы CheckTime).
ну, да - нам же точно известно, где в коде находится
int
h;
нам дают два куска кода и просят объяснить, что за нах в них происходит.
а, хрен его знает, что.
Отчего же?
Нам точно известно, что h находится в области видимости функции. А для этого существует не так много мест.
И вообще, нужно ориентироваться на тот код, который есть, а не фантазировать, что там есть что-то кроме него.
Нам точно известно, что h находится в области видимости функции. А для этого существует не так много мест.
откуда нам известно, что h находится не в другой функции?
нам видим весь код или ега куски?
В приведенном фрагменте кода другая функция отсутствует.
Этого достаточно.
Обсуждать имеет смысл то, что есть, а не то, что мы можем себе нафантазировать.
В приведенном фрагменте кода другая функция отсутствует.
Этого достаточно.
достаточно для чего?
достаточно для чего?
Это зависит от Ваших фантазий.
заказал себе экран nextion enhanced. На борту у этого экрана есть RTC. Но получить от этого экрна можно только год, месяц, день, час, минута, секунда. Можно както это все преобразовать в секунды (аналог now(); из Time.h) ? Перемножение на количество секунд в году, месяце ... не подходит т.к. они бывают разные
заказал себе экран nextion enhanced. На борту у этого экрана есть RTC. Но получить от этого экрна можно только год, месяц, день, час, минута, секунда. Можно както это все преобразовать в секунды (аналог now(); из Time.h) ? Перемножение на количество секунд в году, месяце ... не подходит т.к. они бывают разные
Как вариант: http://codereview.stackexchange.com/questions/38275/convert-between-date-time-and-time-stamp-without-using-standard-library-routines
Посидел покумекал. И оказалось, что совсем это не сложно.
Всем доброго дня! Форумчане подскажите пожалуйста как можно организовать задержку исполнения кода используя RTС. Мне для полива растений. Допустим с RTC я получаю ткущую секунду и нужно исполнять код 10 сескунд. В голове крутиться но никак не соберу. Модуль использую DS3231
изложите более детально чего вы хотите, а то голова крутится, от того что прочитал.
Всем доброго дня! Форумчане подскажите пожалуйста как можно организовать задержку исполнения кода используя RTС. Мне для полива растений. Допустим с RTC я получаю ткущую секунду и нужно исполнять код 10 сескунд. В голове крутиться но никак не соберу. Модуль использую DS3231
берёшь сырое время, а не секунду, которое тебе отдаёт модуль и сравниваешь разницу в 10 секунд.
Да, но как? Допустим сырое время 55 секунд в переменной инт, если я к переменной прибавлю 10 секунд будет 65 в значении, а корректное время то будет 05 секунд.
изложите более детально чего вы хотите, а то голова крутится, от того что прочитал.
Есть подключенные часы RTC...
дальше по опредлеленному событию, подавать на 2й пин напряжение на 10 секунд после снять напряжение. И чтобы сравнение прошедших 10 секунд получать из модуля часов без делай или millis
Просто переведи время в секунды и сравнивай/отнимай
Да, но как? Допустим сырое время 55 секунд в переменной инт, если я к переменной прибавлю 10 секунд будет 65 в значении, а корректное время то будет 05 секунд.
нет. ты берёшь Юникс-время из своего модуля и ежесекундно сравниваешь его. по достижении разницы между стоп_Юникс_тиме и старт_Юниск_тиме равное 5-ти, что то делаешь.
в секундах у тебя время в модуле генерится и хранится - минуты и прочее, это уже календарные производные, которые не должны тебя волновать вообще.
Да, но как? Допустим сырое время 55 секунд в переменной инт, если я к переменной прибавлю 10 секунд будет 65 в значении, а корректное время то будет 05 секунд.
нет. ты берёшь Юникс-время из своего модуля и ежесекундно сравниваешь его. по достижении разницы между стоп_Юникс_тиме и старт_Юниск_тиме равное 5-ти, что то делаешь.
в секундах у тебя время в модуле генерится и хранится - минуты и прочее, это уже календарные производные, которые не должны тебя волновать вообще.
Кажется понял в какую сторону смотреть. Спасибо!
Не знаю, испугает вас это или нет, но уточню совет кота: https://www.nongnu.org/avr-libc/user-manual/group__avr__time.html#gab687d0e66f0c74b9723ff9c718ea57da
Да, но как? Допустим сырое время 55 секунд в переменной инт, если я к переменной прибавлю 10 секунд будет 65 в значении, а корректное время то будет 05 секунд.
Вы не в курсе, что такое "сырое время"? Это время только в секундах, без минут, часов, дней... Когда вы прибавлете к 55 секундам "сырого времени" еще 10, то получается не "минута и 5 секунд". а просто 65 секунд.
В большинстве компьютерных систем используется именно "сырое время", а не привычный людям календарь. Например в Unix системное время измеряется в секундах с 1 января 1970 г. В настоящее время там натикало чуть более 1.5 миллиардов секунд. В Ардуине "сырое время" отсчитывается от перезапуска системы. Переводите все свои интервалы в чистые секунды и спокойно отсчитывайте нужный интервал.
Да, но как? Допустим сырое время 55 секунд в переменной инт, если я к переменной прибавлю 10 секунд будет 65 в значении, а корректное время то будет 05 секунд.
Вы не в курсе, что такое "сырое время"? Это время только в секундах, без минут, часов, дней... Когда вы прибавлете к 55 секундам "сырого времени" еще 10, то получается не "минута и 5 секунд". а просто 65 секунд.
В большинстве компьютерных систем используется именно "сырое время", а не привычный людям календарь. Например в Unix системное время измеряется в секундах с 1 января 1970 г. В настоящее время там натикало чуть более 1.5 миллиардов секунд. В Ардуине "сырое время" отсчитывается от перезапуска системы. Переводите все свои интервалы в чистые секунды и спокойно отсчитывайте нужный интервал.
Да, это я уже понял, сейчас читаю про unixtime. Спасибо за подсказку!
Нет сырого вреени в ds3231. Или самому делать надо, или в некоторых библиотеках хелпер get_unixtime(struct ts t); встречается.