Отсчет времени после включения и выключения
- Войдите на сайт для отправки комментариев
Есть переменная TimeLightOffOn
После включения или выключения в эту переменную я записываю millis();
Далее вот так я узнаю сколько секунд, минус и часов работает или выключена лампочка:
(millis()-TimeLightOffOn)/1000 - получаем секунды
((millis()-TimeLightOffOn)/1000)/60 - получаем минуты
((millis()-TimeLightOffOn)/1000)/3600 - получаем часы
В этом коде есть 1 недостаток, вывод данных примерно такой: 0:13:803
Тоесть секунды не обнуляются после 60 а плусуются бесконечно, так же дело обстоит с минутами и часами.
Насколько я понимаю таким образом не получится никак нормально выводить время.
Но у меня есть DC1307
Вывод реального времени я делаю так:
rtc[2] - часы
rtc[1] - минусы
rtc[0] - секунды
Поделитесь пожалуйста идеей как выводить время работы в таком формате 11:22:02
наверное секунды можно получить вот так - ((millis()-TimeLightOffOn)/1000)%60
А как быть с минутами и часами?
:)
соответственно остаток оставлять от 60 и 24
Не помогло, не с секундами не с минутами.
Что не помогло?
Мне msng посоветовал в конце (millis()-TimeLightOffOn)/1000 добавить %60
Вот так ((millis()-TimeLightOffOn)/1000)%60. Я это сделал. Но секунды как продолжали плюсоваться после 60 так и продолжают. Тоесть сейчас секунд может быть и 300 и 700 секунд и более.
Хотя задача после 60 обнулять секунды и считать заново. Так же и минуты, после 60 минут должны обнулятся.
Вы либо при написании этого опечатались, либо что-то еще делаете кроме этого вычесления.
Конструкция ((millis()-TimeLightOffOn)/1000)%60 в принципе не может возвращать число больше, чем 59.
Выложите сюда свой код.
Должно быть примерно вот так:
Что бы не ждать целый день я вместо вычитания TimeLightOffOn из millis() складываю их:
В монироре видим:
Все получилось. Я с скобками ранее намудрил. Никогда ранее не сталкивался с % в таких уровненеиях. Какая-то мистика но работает замечательно. Еще раз спасибо.
никакой мистики, а % действительно оч полезный оператор, его наверное можно решить как то по другому, но с ним гораздо проще...
maksim а что такое: 1000UL, и где про это можно почитать?
Этими суффиксами задается тип константы
U - unsigned int
L - long
UL - unsigned long
Для чего? В данном случае это конечно лишнее, просто для "перестраховки", а вот например такая конструкция:
как думаете что присвоится переменной TimeLightOffOn?
2000000 ?, а не тут то было... можете проверить:
дело в том что у обоих констнт по умолчанию тип int и вычисления происходят в этом же объеме памяти (2 байта), поэтому что бы получились 2000000 нужно у одной из констант изменить тип например на long
Во блин, а где это все почитать то можно?
Не поверите, но в разделе "Программирование" из шапки сайта. Разделы "Константы" и "Типы данных".
Целочисленные константы
int
unsigned int
long
unsigned long
leshak благодарю за подсказку
скопировал скетч, проверил. Почему-то в монитор выводит 59:57
unsigned
long
TimeLightOffOn = 86397000;
заменить на
unsigned
long
TimeLightOffOn = 0;