Функция для вывода времени работы Arduino

Данная функция выводит в последовательный порт время работы платы Arduino после включения или перезагрузки в формате ЧАСЫ:МИНУТЫ:СЕКУНДЫ 00:00:00


ВСТУПЛЕНИЕ

Что такое функция millis() ?

Время работы Arduino ничем не ограничено. Этот микроконтроллер может быть включен постоянно.
Для подсчета времени с момента включения или c момента перезагрузки платы существует функция millis() .
Arduino считает количество миллисекунд, которое прошло с момента  запуска платы.
Их количество можно узнать с помощью функции millis().

Например, пусть у нас есть переменная time. В случае использования строки кода time=millis();   ,  переменная time будет содержать некоторое количество миллисекунд.
В одной секунде содержится 1000 миллисекунд, поэтому время измеряемое в миллисекундах неудобно для восприятия человеком, но вполне понятно машинам, роботам и микросхемам.
После 50 суток работы Arduino встроенный счетчик миллисекунд обнуляется и начинает отсчет снова.


Ниже приводится код функции TimePrint, которая переводит миллисекунды в понятный человеку формат.

// RobotDay.ru TimePrint Function
void TimePrint()
{
int time=millis()/1000;
if (time/60/60<10) { Serial.print ("0"); }
Serial.print (time/60/60);
Serial.print (":");
if (time/60%60<10) { Serial.print ("0"); }
Serial.print ((time/60)%60);
Serial.print (":");
if (time%60<10) { Serial.print ("0"); }
Serial.println (time%60);
}

Данная функция выводит в последовательный порт время работы платы Arduino после включения или перезагрузки в формате часы:минуты:секунды ( 00:00:00 ).
Вызывается в вашем коде, как TimePrint();
Использует встроенную функцию millis(). Обратите внимание, что счетчик функции millis() сбрасывается после 50 дней работы.
Полезна для отладки и тестирования различных датчиков и сенсоров.

Логика расчета секунд, минут и часов при пересчете из миллисекунд.
Как пересчитывать секунды, минуты, часы и дни в Arduino.

Чтобы узнать общее количество секунд, значение функции millis() необходимо разделить на 1000.
Чтобы количество секунд перевести в минуты, делим их значение на 60. Остаток от целочисленного деления – точные секунды ( от 0 до 59 ).
Чтобы количество минут перевести в часы, делим их значение на 60. Остаток от целочисленного деления – точные минуты ( от 0 до 59 ).
Таким образом получаем значение времени работы платы Arduino в обычном понятном формате.

В данной программе расчет идет несколько в другом порядке.

Переводим в секунды, теперь их значение содержит переменная time.

time=millis()/1000

Далее сразу считаем целые часы и выводим их значение в последовательны порт.

if (time/60/60<10) { Serial.print ("0"); }
Serial.print (time/60/60);
Serial.print (":");

Затем высчитываем целые минуты, их остаток уже за вычетом целых часов.

if (time/60%60<10) { Serial.print ("0"); }
Serial.print ((time/60)%60);
Serial.print (":");

И высчитываем секунды.

if (time%60<10) { Serial.print ("0"); }
Serial.println (time%60);

Время с момента включения Ардуино будет выглядеть следующим образом, например : 05:42:14
Чтобы перевести время в число необходимо выполнить обратную операцию.
Таким образом, вывод времени на Ардуино будет осуществляться в удобном формате.

Это пример классического программирования функции millis(), при использовании классов и объектов (классы и объекты в Arduino)  код можно оптимизировать.

Функция millis() позволяет собрать на Ардуино простейший секундомер, счетчик времени, с использованием тактовых кнопок и семисегментных индикаторов, светодиодов.

Использовать функцию millis() и семисегментный индикатор, чтобы сделать цифровые часы, не рекомендуется, так как для этого нужно использовать более точные часы реального времени.

RTC ( Real Time Clock ) – эти микросхемы имеют собственный элемент питания, не зависят от выключения и перезагрузок платы Ардуино, позволяют отслеживать и время и дату.

Например, можно использовать плату DS1302 Real Time Clock.

Модули часов реального времени производятся на нескольких популярных микросхемах.

Обсуждение на форуме.