Uptime
- Войдите на сайт для отправки комментариев
Ср, 06/04/2022 - 11:35
Не судите строго за детский вопрос. Как лучше посчитать аптайм в формате привычным человеческому глазу? А именно чч:мм:cc.
String uptime() { uint32_t seconds = millis() / 1000ul; // полное количество секунд uint32_t Hour = (seconds / 3600ul); // часы uint32_t Min = (seconds % 3600ul) / 60ul; // минуты uint32_t Sec = (seconds % 3600ul) % 60ul; // секунды uint32_t time = (Hour, Mins Sec"); // чч:мм:сс Serial.println(time); return String(time); }
Знаю что 7 строка не верно записана. Нужно как-то в нее переменные уложить через разделитель двоеточие.
" время в одну переменную через двоеточие" - это лютый бред.
Вам всего лишь надо вывести часы, минуты и секунды на печать. Вот и выводите - сначала одно, потом другое, потом третье. И двоеточия печатайте, где надо.
Не судите строго за детский вопрос. Как лучше посчитать аптайм в формате привычным человеческому глазу? А именно чч:мм:cc.
Знаю что 7 строка не верно записана. Нужно как-то в нее переменные уложить через разделитель двоеточие.
А что будет после переполнения millis(), подумали ?
А что будет после переполнения millis(), подумали ?
Ну так это аж через 50 суток.
sprintf(buf, "%02d:%02d:%02d", H,M,S);
А что будет после переполнения millis(), подумали ?
ему даже дни не надо
ему даже дни не надо
Дольше суток все равно не протянет?
ему даже дни не надо
Дольше суток все равно не протянет?
почему нет, к примеру на ESP8266 имею чуток более 440 суток...
ему даже дни не надо
Дольше суток все равно не протянет?
почему нет, к примеру на ESP8266 имею чуток более 440 суток...
Почему нет, у самого ESP работают без проблем и совсем без перезапусков, ну очень давно.
Я про ТС:
Ну так это аж через 50 суток.
Стало интересно на сколько millis() хватает с точностью до секунды:
В строке 7 используйте тип String и просто сложите всё в кучу.
Дед Семён, спасибо за наводку!
Решил немного усложнить задачу. Вывести не аптайм, а остаток времени до включения таймера, так удобней. (Код самого таймера приводить не буду., что бы в глазах не рябило :)). Ну и пусть умеет работать с большими интервалами времени.
Не уверен правильные ли типы данных выбрал в строках 6-8 ? Хотелось бы сократить количество вычислений, но явно не получится. Насколько sprintf прожорлив?
А на кой ляд у тебя time_on стрингом, если ты потом ее к числу приводишь? Да еще к вещественному... Брррр....
В 06...08 строках тип uint32_t
А на кой ляд у тебя time_on стрингом, если ты потом ее к числу приводишь? Да еще к вещественному... Брррр....
В 06...08 строках тип uint32_t
Клянусь, я не любитель стрингов! )))))
В 06...08 строках тип uint32_t
нафига? число минут и секунд заведомо не более 59-ти.
тут и байта хватит - то исть uint8
нафига? число минут и секунд заведомо не более 59-ти.
тут и байта хватит - то исть uint8
А и верно. Что-то я с утра не проснувшийся видимо писал... ))
Не уверен правильные ли типы данных выбрал в строках 6-8 ?
замечание по коду. В выражениях
спецификатор "ul" избыточен. Переменная sec сама имеет размерность ulong, а значит все вычисления и без указания "ul" будут идти в этом размере.
спецификатор "ul" избыточен. Переменная sec сама имеет размерность ulong, а значит все вычисления и без указания "ul" будут идти в этом размере.
А я всегда стараюсь использовать константы со спецификатором типа, если переменные в операции отличаются от int.
Может сейчас и не нужно, но осталась привычка с давних времен.
число минут и секунд заведомо не более 59-ти.
Минут - да, а секунд может быть и 60.
и даже 172800 секунд, если это DHCP к примеру )))
Открылась новая беда. Примерно через 12 минут происходит отваливание и реконнект. Убрал секунды, оставил только часы и минуты, время через которое происходит реконнект увеличилось. В монитор порта выдает это.
Отключи собаку)) Или обнуляй во время работы.
Не, не нужно ни отключать, ни обнулять. Нужно управление ядру отдавать, не зависая на долго в loop().
Зачем отключать защитный механизм.
Не, не нужно ни отключать, ни обнулять. Нужно управление ядру отдавать, не зависая на долго в loop().
Зачем отключать защитный механизм.
А про loop() я и не заикался. Про управление ядром можно ссылку для самообразования? А то Гугл меня ненавидит.
Ну тогда выкладывайте свой код целиком, чтобы общаться предметно.
Выкрутился, "Task watchdog got triggered" больше не беспокоит. Ушел от стринга и оформил отдельной функцией.
Для быстродействия есть разница?
1. Производить все расчеты в миллисекундах, а результат выводить в секундах.
2. Сразу всё конвертировать в секунды, далее производить в них расчеты.
Какой варианты более предпочтительный?
Ушел от стринга
А это что?
Или тебе принципиально нужно в string время задавать?
Ушел от стринга
А это что?
Или тебе принципиально нужно в string время задавать?
Правильно заметил. Касательно этого куска (если рассматривать только его), то складывается впечатление что можно было бы обойтись переменной. Но этот фрагмент должен быть включен в большой код, вот там то и будет задействован стринг в функции processor. Ему придется работать с вэб страницей, без этого никак.
Так преобразуй значение сразу после получения с веб-страницы и парсинга, зачем каждый раз то его преобразовывать?
Осталось результат этой функции отправить на вэб страницу.
Думал как то так, но не сращивается.
Наставьте на путь истинный плиз?
Мы ж с тобой вот тут вроде как все выяснили. Или в чем вопрос то?
Мы ж с тобой вот тут вроде как все выяснили. Или в чем вопрос то?
Там не проканало, если только массив через split как вы там рекомендовали, то норм. Но у меня там "мешают" в onMessage(event) разные включалки на swith case.
Чем мешают? Собери так же как и два значения все необходимые (хоть сотню) и через сплит на странице уже раздели в массив, дальше знаешь. Получишь все что нужно.
Можете посмотреть это:
https://github.com/YiannisBourkelis/Uptime-Library