Files
IoTManager/lib/iarduino_RTC/examples/getvartime/getvartime.ino

138 lines
17 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Пример считывания текущего времени в переменные: //
//
// Раскомментируйте для программной реализации шины I2C: //
// #define pin_SW_SDA 3 // Назначение любого вывода Arduino для работы в качестве линии SDA программной шины I2C.
// #define pin_SW_SCL 9 // Назначение любого вывода Arduino для работы в качестве линии SCL программной шины I2C.
// Раскомментируйте для совместимости с большинством плат: //
// #include <Wire.h> // Библиотека iarduino_RTC будет использовать методы и функции библиотеки Wire.
// Ссылки для ознакомления: //
// Подробная информация о подключении модуля к шине I2C: // http://wiki.iarduino.ru/page/i2c_connection/
// Подробная информация о функциях и методах библиотеки: // http://wiki.iarduino.ru/page/chasy-realnogo-vremeni-rtc-trema-modul/
//
#include <iarduino_RTC.h> // Подключаем библиотеку iarduino_RTC для работы с модулями реального времени.
// iarduino_RTC watch(RTC_DS1302, 2, 3, 4); // Объявляем объект watch для работы с RTC модулем на базе чипа DS1302, указывая выводы Arduino подключённые к выводам модуля RST, CLK, DAT.
// iarduino_RTC watch(RTC_DS1307); // Объявляем объект watch для работы с RTC модулем на базе чипа DS1307, используется шина I2C.
iarduino_RTC watch(RTC_DS3231); // Объявляем объект watch для работы с RTC модулем на базе чипа DS3231, используется шина I2C.
// iarduino_RTC watch(RTC_RX8025); // Объявляем объект watch для работы с RTC модулем на базе чипа RX8025, используется шина I2C.
//
uint8_t D, M, Y, h, m, s, W; // Объявляем переменные для получения следующих значений: D-день, M-месяц, Y-год, h-часы, m-минуты, s-секунды, W-день недели.
//
void setup(){ //
delay(300); // Ждем готовности модуля отвечать на запросы.
Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод.
watch.begin(); // Инициируем работу с модулем.
} //
void loop(){ //
if(millis()%1000==0){ // Если прошла 1 секунда.
watch.gettime(); // Считываем текущее время из модуля в буфер библиотеки.
D = watch.day; // Получаем из буфера библиотеки текущий день месяца 1-31.
M = watch.month; // Получаем из буфера библиотеки текущий месяц 1-12.
Y = watch.year; // Получаем из буфера библиотеки текущий год 0-99.
h = watch.Hours; // Получаем из буфера библиотеки текущие часы 0-23.
m = watch.minutes; // Получаем из буфера библиотеки текущие минуты 0-59.
s = watch.seconds; // Получаем из буфера библиотеки текущие секунды 0-59.
W = watch.weekday; // Получаем из буфера библиотеки текущий день недели 0-6.
Serial.println((String) D+"-"+M+"-"+Y+", "+h+":"+m+":"+s+", "+W); // Выводим время в монитор, одной строкой.
delay(1); // Приостанавливаем скетч на 1 мс, чтоб не выводить время несколько раз за 1мс.
} //
} //
//
// ================================================================== //
// ОПИСАНИЯ ПАРАМЕТРОВ ФУНКЦИЙ:
//
// • Подключение библиотеки:
// #include <iarduino_RTC.h>
// iarduino_RTC watch(название модуля [, вывод SS/RST [, вывод CLK [, вывод DAT]]]);
// - Если модуль работает на шине I2C или SPI, то достаточно указать 1 параметр, например: iarduino_RTC watch(RTC_DS3231);
// - Если модуль работает на шине SPI, а аппаратный вывод SS занят, то номер назначенного вывода SS для модуля указывается вторым параметром, например: iarduino_RTC watch(RTC_DS1305,22);
// - Если модуль работает на трехпроводной шине, то указываются номера всех выводов, например: iarduino_RTC watch(RTC_DS1302, 2, 3, 4); // RST, CLK, DAT.
//
// • Для работы с модулями, в библиотеке реализованы 7 функции:
// - Инициировать модуль begin();
// - Указать время settime(секунды [, минуты [, часы [, день [, месяц [, год [, день недели]]]]]]);
// - Получить время gettime(["строка с параметрами"]);
// - Мигать времем blinktime(0-не_мигать / 1-мигают_сек / 2-мигают_мин / 3-мигают_час / 4-мигают_дни / 5-мигают_мес / 6-мигает_год / 7-мигают_дни_недели / 8-мигает_полдень);
// - Разгрузить шину period(минуты);
// - Получить Unix время gettimeUnix();
// - Указать Unix время settimeUnix(секунды);
//
// • Функция begin():
// - Функция инициирует модуль: проверяет регистры модуля, запускает генератор модуля и т.д.
//
// • Функция settime(секунды [, минуты [, часы [, день [, месяц [, год [, день недели]]]]]]):
// - Функция записывает время в модуль.
// - Год указывается без учёта века, в формате 0-99.
// - Часы указываются в 24-часовом формате, от 0 до 23.
// - День недели указывается в виде числа: 0-воскресенье, 1-понедельник, 2-вторник ..., 6-суббота.
// - Если предыдущий параметр надо оставить без изменений, то можно указать отрицательное или заведомо большее значение.
// - Все параметры, кроме секунд, являются необязательными. Если параметр не указан, значит он не будет изменён.
// - Пример: watch.settime(-1, 10); // Установить 10 минут, а секунды, часы и дату, оставить без изменений.
// - Пример: watch.settime(0, 5, 13); // Установить 13 часов, 5 минут, 0 секунд, а дату оставить без изменений.
// - Пример: watch.settime(-1, -1, -1, 9, 2, 17); // Установить дату 09.02.2017, а время и день недели оставить без изменений.
//
// • Функция gettime(["строка с параметрами"]):
// - Функция получает и возвращает строку заменяя описанные ниже символы на текущее время:
// - Пример: watch.gettime("d-m-Y, H:i:s, D"); // Вернуть строку с датой и временем, например: "01-10-2015, 14:00:05, Thu".
// - Пример: watch.gettime("s"); // Вернуть строку с секундами, например: "05".
// - Указанные символы идентичны символам для функции date() в PHP:
// s - Вернуть секунды от 00 до 59 (два знака).
// i - Вернуть минуты от 00 до 59 (два знака).
// h - Вернуть часы в 12-часовом формате от 01 до 12 (два знака).
// H - Вернуть часы в 24-часовом формате от 00 до 23 (два знака).
// d - Вернуть день месяца от 01 до 31 (два знака).
// w - Вернуть день недели от 0 до 6 (один знак: 0-воскресенье, 6-суббота).
// D - Вернуть день недели наименование от Mon до Sun (три знака: Mon Tue Wed Thu Fri Sat Sun).
// m - Вернуть месяц от 01 до 12 (два знака).
// M - Вернуть месяц наименование от Jan до Dec (три знака: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec).
// Y - Вернуть год от 2000 до 2099 (четыре знака).
// y - Вернуть год от 00 до 99 (два знака).
// a - Вернуть полдень am или pm (два знака, в нижнем регистре).
// A - Вернуть полдень AM или PM (два знака, в верхнем регистре).
//
// Если требуется получить время в виде цифр, то можно вызвать функцию gettime() без параметра, после чего получить время из переменных:
// - Пример: watch.gettime();
// Serial.print(watch.Hours); Serial.print(":"); // Вывести часы.
// Serial.print(watch.minutes); Serial.print(":"); // Вывести минуты.
// Serial.print(watch.seconds); Serial.println(""); // Вывести секунды.
// seconds - Переменная содержит секунды 0-59.
// minutes - Переменная содержит минуты 0-59.
// hours - Переменная содержит часы 1-12.
// Hours - Переменная содержит часы 0-23.
// midday - Переменная содержит полдень 0-1 (0-am, 1-pm).
// day - Переменная содержит день месяца 1-31.
// weekday - Переменная содержит день недели 0-6 (0-воскресенье, 6-суббота).
// month - Переменная содержит месяц 1-12.
// year - Переменная содержит год 0-99.
// Unix - Переменная содержит секунды прошедшие с начала эпохи Unix.
//
// • Функция blinktime(параметр [, частота ]):
// - Данная функция указывает функции gettime("строка с параметрами"); мигать одним из параметров времени (заменять параметр пробелами).
// - Эта функция может быть полезна, для отображения на дисплее, устанавливаемого параметра времени.
// Например, при установке минут, они начинают мигать, и Вам понятно, что именно Вы устанавливаете.
// - Первым аргументом функции указывается параметр в виде числа от 0 до 8:
// 0 - не мигать.
// 1 - мигают сек.
// 2 - мигают мин.
// 3 - мигают час.
// 4 - мигают дни.
// 5 - мигают мес.
// 6 - мигает год.
// 7 - мигают дни недели.
// 8 - мигает полдень.
// - Второй аргумент функции является необязательным, он указвает частоту миганий в Гц, по умолчанию 1Гц.
// - Пример: watch.blinktime(6); // При выводе на дисплей будет мигать год с частотой по умолчанию 1Гц.
// - Пример: watch.blinktime(6, 2); // При выводе на дисплей будет мигать год с частотой 2Гц.
//
// • Функция period(минуты):
// - Устанавливает минимальный период обращения к модулю в минутах (от 0 до 255).
// - Данная функция указывает функции gettime() откуда брать текущее время: из модуля (не чаще заданного периода), или рассчитать в библиотеке (без обращения к модулю).
// - Пример: watch.period(10); // Теперь функция gettime() будет получать время от модуля только 1 раз в 10 минут.
// Ответом на все остальные запросы к функции gettime(), будет рассчитанное время: сумма времени полученного от модуля и времени прошедшего с момента его получения.
//
// • Функция gettimeUnix():
// - Функция возвращает число равное количеству секунд прошедших с начала эпохи Unix (с полуночи 1 января 1970 года).
//
// • Функция settimeUnix(секунды):
// - Функция записывает время в модуль.
// - В качестве единственного параметра функции указывается количество секунд прошедших с начала эпохи Unix.
// - Пример: watch.settimeUnix(1577836800); // Установить время на 1577836800 сек больше даты 01.01.1970г 00:00:00, что соответствует дате 01.01.2020г 00:00:00.