Arduino:Библиотеки/Time
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Библиотека Time [1][2]
Эта библиотека позволяет Arduino следить за временем, не используя для этого стороннее оборудование. Она позволяет скетчу получать информацию о текущем времени и дате: секунде, минуте, часе, дне, месяце и годе. Кроме того, она использует временной тип данных time_t (стандартный для языка C), что позволяет без труда рассчитать истекшее время и использовать полученные временные значения на разных платформах.
Примечание: Теперь доступны новые версии библиотек Time, TimeAlarms и DS1307RTC, которые были обновлены для новых версий Arduino и совместимости с Arduino Due. Код библиотеки Time обновлен и отличается от старой библиотеки DateTime, которая не работала с Arduino 1.6.1. В папке библиотеки Time также есть несколько скетчей-примеров, демонстрирующих ее использование, но для некоторых из них может потребоваться библиотека UDPbitewise, скачать которую можно здесь.
Дополнительную документацию ищите в файле «readme.txt», идущем в комплекте с библиотекой.
Загрузка
Чтобы загрузить библиотеку, пройдите по этой ссылке, кликните на зеленую кнопку Clone or download, а затем на Download ZIP. Когда ZIP-файл скачается, распакуйте его, а получившуюся папку переименуйте в «Time». Проверьте эту папку на наличие файлов «Time.cpp» и «Time.h».
Установка
Чтобы использовать библиотеку, поместите распакованный ZIP-файл в папку для библиотек IDE Arduino. Чтобы узнать, где находится эта папка на PC, откройте IDE Arduino, кликните на Файл > Настройки (File > Preferences) – адрес папки будет указан в самом верху, в поле «Размещение папки скетчей» (Sketchbook location). Затем перезапустите IDE Arduino. Если папки «libraries» нет, ее нужно создать.
Функции
Базовые функции
- Функция hour() считывает текущий час. Диапазон доступных значений: 0-23.
- Функция minute() считывает текущую минуту. Диапазон доступных значений: 0-59.
- Функция second() считывает текущую секунду. Диапазон доступных значений: 0-59.
- Функция day() считывает текущий день. Диапазон доступных значений: 0-31.
- Функция weekday() считывает текущий день недели. Воскресенье – это «1» и т.д.
- Функция month() считывает текущий месяц. Диапазон доступных значений: 1-12.
- Функция year() считывает текущий год. Возвращает четырехзначную цифру («2009», «2012» и т.д.)
- Функция setTime(t) выставляет системное время на время, сохраненное в переменной t. Эту функцию можно использовать в варианте setTime(hr,min,sec,day,month,yr), где шесть аргументов в скобочках – это значения, отвечающие за час, минуту, секунду, день, месяц и год.
- Функция adjustTime(adjustment) настраивает системное время при помощи добавления определенного значения.
Внимание: Функция adjustTime() несовместима с функцией setSyncProvider(), поскольку настраивает только системное время, но не время в синхронизаторе. То есть смещение времени при использовании adjustTime() будет потеряно при следующем использовании синхронизатора. Если время сместилось вперед, то вызов now(), скорее всего, причитает время от синхронизатора, чем системное время, настроенное библиотекой. Таким образом, если вы используете синхронизатор и вам нужно сосчитать настроенное время, то надеяться на now() не стоит, даже если вы вызываете эту функцию сразу после adjustTime().
Функции для работы с 12-часовым форматом
- Функция hourFormat() переключает библиотеку в слежение за временем в 12-часовом формате.
- Функция isAM() возвращает true, если текущее время – до полудня (AM).
- Функция isPM() возвращает true, если текущее время – после полудня (PM).
Для 32-битного типа данных «time_t»
Для времени используется специальный тип данных time_t, в котором хранится количество секунд, прошедших с 1 января 1970 года. Этот тип данных, состоящий из одного числа, упрощает хранение и сравнение данных о времени, потому что вам уже не приходится иметь дело с несколькими числами вроде количества дней в месяце, количества месяцев в году и т.д.
Работа с этими данными осуществляется через опциональный аргумент t, который указывается в функциях для считывания времени и даты. Это предотвращает ошибки в ситуациях, к примеру, когда между считыванием минуты и секунды начинается новая минута, и итоговые значения получаются некорректными. Использование опционального параметра устраняет эту проблему.
- Функция now() считывает время, прошедшее с 1 января 1970 года (в секундах).
Конструкция time_t t = now() сохраняет текущее время в переменную t.
- Функция hour(t) считывает час, сохраненный в переменной t.
- Функция minute(t) считывает минуту, сохраненную в переменной t.
- Функция second(t) считывает секунду, сохраненную в переменной t.
- Функция day(t) считывает день, сохраненный в переменной t.
- Функция weekday(t) считывает день недели, сохраненный в переменной t.
- Функция month() считывает месяц, сохраненный в переменной t.
- Функция year() считывает год, сохраненный в переменной t.
Другими словами, семь функций выше конвертируют переменную типа time_t в обычную единицу измерения времени (минуту, час, месяц и пр.). Возможно, этими функциями будет пользоваться проще, чем BreakTime() и 7-фрагментным аргументом tm (см. ниже).
- Функция makeTime(tm) конвертирует обычные дату и время в тип данных time_t. Соответственно, возвращаемое значение – тип данных time_t. Аргумент tm – переменная типа TimeElements, которая имеет следующие поля:
tm.Second Секунды 0-59
tm.Minute Минуты 0-59
tm.Hour Часы 0-23
tm.Wday Дни недели 0-6 (не нужно для mktime)
tm.Day Дни 1-31
tm.Month Месяцы 1-12
tm.Year Годы 0-99 (отсчет начинается с 1970)
- Функция breakTime(t, tm) конвертирует тип данных time_t в обычные дату и время. Аргумент tm – переменная типа TimeElements, имеющая 7 полей и рассчитывающаяся на основе аргумента t.
Строковые функции
- monthStr()
- monthShortStr()
- dayStr()
- dayShortStr()
Обратите внимание, что для этих строковых функций нужен аргумент. Он не должен быть временной меткой (к примеру, time_t), а чем-то вроде month(). То есть в итоге у вас должно получиться что-то вроде monthStr(month()) или dayStr(weekday()).
Смотрите также пример «Передача строки даты по последовательному порту».
Функции для синхронизации с другими временными сервисами
- Функция timeStatus() сообщает, было ли задано время, а также было ли оно недавно синхронизировано. Возвращает одно из следующих значений: timeNotSet (время задано не было, отсчет начат с 1 января 1970 года), timeNeedsSync (время было задано, но попытка синхронизации не удалась) и timeSet (время было задано и синхронизировано).
Если функция вернула статус timeNotSet, то значения для времени и даты будут некорректными. Если функция вернет один из двух других статусов (timeNeedsSync и timeSet), то возвращаемые значения можно использовать, но при статусе timeNeedsSync время, возможно, будет немного сдвинуто.
- Функция setSyncProvider(getTimeFunction) настраивает время, автоматически вызывая функцию getTimeFunction(). Она считывает время у стороннего сервиса и возвращает значение типа time_t или «0» (если время неизвестно).
- Функция setSyncInterval(interval) задает количество секунд между синхронизациями. Другими словами, с ее помощью настраивается, как часто вызывается функция getTimeFunction(). Аргумент interval – это, собственно, интервальный период между синхронизациями.
Также в файле «TimeLib.h», который идет в комплекте с библиотекой, есть макросы для временных констант и преобразования единиц времени.
Примеры
- TimeArduinoDue - Синхронизация времени с помощью RTC (для Arduino Due)
- TimeGPS - Синхронизация времени с помощью GPS
- TimeNTP - Синхронизация времени с помощью NTP-сервера
- TimeNTP ESP8266WiFi - Синхронизация времени с помощью NTP-сервера и WiFi
- TimeRTC - Синхронизация времени с помощью RTC (для остальных Arduino)
- TimeRTCLog - Учет изменений состояний на контактах с помощью RTC
- TimeRTCSet - Установка RTC-времени
- TimeSerial - Настройка библиотеки Time при помощи последовательного порта
- TimeSerialDateStrings - Настройка библиотеки Time при помощи последовательного порта (со строковыми сообщениями)
- TimeTeensy3 - Синхронизация времени с помощью RTC на Teensy
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |