From 70973cae1905dea8026a55dca7afc4674f1812a0 Mon Sep 17 00:00:00 2001 From: IoT Manager <67171972+IoTManagerProject@users.noreply.github.com> Date: Mon, 23 Oct 2023 01:09:18 +0200 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=B8=D0=BB=D1=8F=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- compilerProfile.json | 28 +- data_svelte/flashProfile.json | 10 +- data_svelte/items.json | 58 ++- lib/iarduino_RTC/.gitattributes | 2 + lib/iarduino_RTC/LICENSE | 13 + lib/iarduino_RTC/README.md | 104 ++++ lib/iarduino_RTC/examples/gettime/gettime.ino | 128 +++++ .../examples/gettimeUnix/gettimeUnix.ino | 128 +++++ .../examples/getvartime/getvartime.ino | 138 ++++++ .../examples/setsystime/setsystime.ino | 137 ++++++ lib/iarduino_RTC/examples/settime/settime.ino | 129 +++++ .../examples/settimeUnix/settimeUnix.ino | 129 +++++ lib/iarduino_RTC/extras/DS1302.pdf | Bin 0 -> 377387 bytes lib/iarduino_RTC/extras/DS1307.pdf | Bin 0 -> 397150 bytes lib/iarduino_RTC/extras/DS3231.pdf | Bin 0 -> 399704 bytes lib/iarduino_RTC/extras/RX8025.txt | 196 ++++++++ lib/iarduino_RTC/keywords.txt | 30 ++ lib/iarduino_RTC/library.properties | 10 + lib/iarduino_RTC/src/iarduino_RTC.cpp | 134 +++++ lib/iarduino_RTC/src/iarduino_RTC.h | 107 ++++ lib/iarduino_RTC/src/iarduino_RTC_DS1302.h | 67 +++ lib/iarduino_RTC/src/iarduino_RTC_DS1307.h | 42 ++ lib/iarduino_RTC/src/iarduino_RTC_DS3231.h | 42 ++ lib/iarduino_RTC/src/iarduino_RTC_I2C.h | 461 ++++++++++++++++++ lib/iarduino_RTC/src/iarduino_RTC_RX8025.h | 43 ++ lib/iarduino_RTC/src/memorysaver.h | 9 + myProfile.json | 12 +- platformio.ini | 53 +- src/modules/API.cpp | 4 +- .../display/NextionUpload/NextionUpload.cpp | 120 ----- .../display/NextionUpload/modinfo.json | 64 --- src/modules/sensors/RTC/modinfo.json | 40 +- 32 files changed, 2161 insertions(+), 277 deletions(-) create mode 100644 lib/iarduino_RTC/.gitattributes create mode 100644 lib/iarduino_RTC/LICENSE create mode 100644 lib/iarduino_RTC/README.md create mode 100644 lib/iarduino_RTC/examples/gettime/gettime.ino create mode 100644 lib/iarduino_RTC/examples/gettimeUnix/gettimeUnix.ino create mode 100644 lib/iarduino_RTC/examples/getvartime/getvartime.ino create mode 100644 lib/iarduino_RTC/examples/setsystime/setsystime.ino create mode 100644 lib/iarduino_RTC/examples/settime/settime.ino create mode 100644 lib/iarduino_RTC/examples/settimeUnix/settimeUnix.ino create mode 100644 lib/iarduino_RTC/extras/DS1302.pdf create mode 100644 lib/iarduino_RTC/extras/DS1307.pdf create mode 100644 lib/iarduino_RTC/extras/DS3231.pdf create mode 100644 lib/iarduino_RTC/extras/RX8025.txt create mode 100644 lib/iarduino_RTC/keywords.txt create mode 100644 lib/iarduino_RTC/library.properties create mode 100644 lib/iarduino_RTC/src/iarduino_RTC.cpp create mode 100644 lib/iarduino_RTC/src/iarduino_RTC.h create mode 100644 lib/iarduino_RTC/src/iarduino_RTC_DS1302.h create mode 100644 lib/iarduino_RTC/src/iarduino_RTC_DS1307.h create mode 100644 lib/iarduino_RTC/src/iarduino_RTC_DS3231.h create mode 100644 lib/iarduino_RTC/src/iarduino_RTC_I2C.h create mode 100644 lib/iarduino_RTC/src/iarduino_RTC_RX8025.h create mode 100644 lib/iarduino_RTC/src/memorysaver.h delete mode 100644 src/modules/display/NextionUpload/NextionUpload.cpp delete mode 100644 src/modules/display/NextionUpload/modinfo.json diff --git a/compilerProfile.json b/compilerProfile.json index 7c17d771..381f87da 100644 --- a/compilerProfile.json +++ b/compilerProfile.json @@ -25,7 +25,7 @@ "projectProp": { "platformio": { "default_envs": "esp8266_4mb", - "comments_default_envs": "choose from: esp8266_4mb or esp32_4mb or esp32cam_4mb or esp32s2_4mb or esp32_4mb3f or esp8266_1mb or esp8266_1mb_ota or esp8285_1mb or esp8285_1mb_ota", + "comments_default_envs": "choose from: esp8266_4mb or esp32_4mb or esp32cam_4mb or esp32s2_4mb or esp32_4mb3f or esp32s3_16mb or esp32c3m_4mb or esp8266_1mb or esp8266_1mb_ota or esp8285_1mb or esp8285_1mb_ota", "envs": [ { "name": "esp8266_4mb", @@ -106,6 +106,22 @@ "firmware": "0x10000", "partitions": "0x8000", "littlefs": "0x290000" + }, + { + "name": "esp32c3m_4mb", + "boot_app0": "0xe000", + "bootloader_qio_80m": "0x1000", + "firmware": "0x10000", + "partitions": "0x8000", + "littlefs": "0x310000" + }, + { + "name": "esp32s3_16mb", + "boot_app0": "0xe000", + "bootloader_qio_80m": "0x1000", + "firmware": "0x10000", + "partitions": "0x8000", + "littlefs": "0x910000" } ] } @@ -130,7 +146,7 @@ }, { "path": "src/modules/virtual/owmWeather", - "active": false + "active": true }, { "path": "src/modules/virtual/Timer", @@ -140,10 +156,6 @@ "path": "src/modules/virtual/Variable", "active": true }, - { - "path": "src/modules/virtual/VariableColor", - "active": true - }, { "path": "src/modules/virtual/VButton", "active": true @@ -418,10 +430,6 @@ "path": "src/modules/display/Lcd2004", "active": true }, - { - "path": "src/modules/display/NextionUpload", - "active": false - }, { "path": "src/modules/display/Oled128", "active": false diff --git a/data_svelte/flashProfile.json b/data_svelte/flashProfile.json index 825be6e6..903e5c8f 100644 --- a/data_svelte/flashProfile.json +++ b/data_svelte/flashProfile.json @@ -24,7 +24,7 @@ }, { "path": "src/modules/virtual/owmWeather", - "active": false + "active": true }, { "path": "src/modules/virtual/Timer", @@ -34,10 +34,6 @@ "path": "src/modules/virtual/Variable", "active": true }, - { - "path": "src/modules/virtual/VariableColor", - "active": true - }, { "path": "src/modules/virtual/VButton", "active": true @@ -312,10 +308,6 @@ "path": "src/modules/display/Lcd2004", "active": true }, - { - "path": "src/modules/display/NextionUpload", - "active": false - }, { "path": "src/modules/display/Oled128", "active": false diff --git a/data_svelte/items.json b/data_svelte/items.json index e31d2a50..49d64ed4 100644 --- a/data_svelte/items.json +++ b/data_svelte/items.json @@ -68,7 +68,29 @@ }, { "global": 0, - "name": "5. Таймер", + "name": "5. Погода OWM", + "type": "Reading", + "subtype": "owmWeather", + "id": "owm", + "needSave": 0, + "widget": "nil", + "page": "Погода", + "descr": "Температура на улице", + "int": 30, + "API_key": "", + "city": "Moscow", + "lon": "37.54", + "lat": "57.74", + "lang": "ru", + "param": "", + "round": 1, + "val": "...", + "debug": 0, + "num": 5 + }, + { + "global": 0, + "name": "6. Таймер", "type": "Writing", "subtype": "Timer", "id": "timer", @@ -80,11 +102,11 @@ "ticker": 1, "repeat": 1, "needSave": 0, - "num": 5 + "num": 6 }, { "global": 0, - "name": "6. Окно ввода числа (переменная)", + "name": "7. Окно ввода числа (переменная)", "type": "Reading", "subtype": "Variable", "id": "value", @@ -98,11 +120,11 @@ "plus": 0, "multiply": 1, "round": 0, - "num": 6 + "num": 7 }, { "global": 0, - "name": "7. Окно ввода времени", + "name": "8. Окно ввода времени", "type": "Reading", "subtype": "Variable", "id": "time", @@ -112,11 +134,11 @@ "descr": "Введите время", "int": "0", "val": "02:00", - "num": 7 + "num": 8 }, { "global": 0, - "name": "8. Окно ввода даты", + "name": "9. Окно ввода даты", "type": "Reading", "subtype": "Variable", "id": "time", @@ -126,11 +148,11 @@ "descr": "Введите дату", "int": "0", "val": "24.05.2022", - "num": 8 + "num": 9 }, { "global": 0, - "name": "9. Окно ввода текста", + "name": "10. Окно ввода текста", "type": "Reading", "subtype": "Variable", "id": "txt", @@ -140,11 +162,11 @@ "descr": "Введите текст", "int": "0", "val": "текст", - "num": 9 + "num": 10 }, { "global": 0, - "name": "10. Вывод значения", + "name": "11. Вывод значения", "type": "Reading", "subtype": "Variable", "id": "vout", @@ -158,20 +180,6 @@ "plus": 0, "multiply": 1, "round": 0, - "num": 10 - }, - { - "global": 0, - "name": "11. Цветной текст", - "type": "Reading", - "subtype": "VariableColor", - "id": "color", - "needSave": 0, - "widget": "anydataDef", - "page": "Вывод", - "descr": "Цветной текст", - "val": "...", - "round": 0, "num": 11 }, { diff --git a/lib/iarduino_RTC/.gitattributes b/lib/iarduino_RTC/.gitattributes new file mode 100644 index 00000000..dfe07704 --- /dev/null +++ b/lib/iarduino_RTC/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/lib/iarduino_RTC/LICENSE b/lib/iarduino_RTC/LICENSE new file mode 100644 index 00000000..8e99b7e9 --- /dev/null +++ b/lib/iarduino_RTC/LICENSE @@ -0,0 +1,13 @@ +Copyright © 2019 iarduino.ru + +Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, а также лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий: + +Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения. + +ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ, ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/lib/iarduino_RTC/README.md b/lib/iarduino_RTC/README.md new file mode 100644 index 00000000..c3d7253b --- /dev/null +++ b/lib/iarduino_RTC/README.md @@ -0,0 +1,104 @@ + +[![](https://iarduino.ru/img/logo.svg)](https://iarduino.ru)[![](https://wiki.iarduino.ru/img/git-shop.svg?3)](https://iarduino.ru) [![](https://wiki.iarduino.ru/img/git-wiki.svg?2)](https://wiki.iarduino.ru) [![](https://wiki.iarduino.ru/img/git-lesson.svg?2)](https://lesson.iarduino.ru)[![](https://wiki.iarduino.ru/img/git-forum.svg?2)](http://forum.trema.ru) + +# iarduino_RTC [СКАЧАТЬ](https://github.com/tremaru/iarduino_RTC/archive/1.2.1.zip) +Библиотека позволяет читать и записывать время RTC модулей на базе чипов: DS1302, [DS1307](http://iarduino.ru/shop/Expansion-payments/chasy-realnogo-vremeni-rtc-trema-modul.html), [DS3231](http://iarduino.ru/shop/Expansion-payments/chasy-realnogo-vremeni-rtc-trema-modul-v2-0.html), ... +Преимуществом данной библиотеки является удобная реализация получения времени. +> Подробнее про установку библиотеки читайте в нашей [инструкции](https://wiki.iarduino.ru/page/Installing_libraries/). + +Пример подключения к [Arduino](https://iarduino.ru/shop/boards/arduino-uno-r3.html)/[Piranha UNO](https://iarduino.ru/shop/boards/piranha-uno-r3.html) с помощью [Trema Shield](https://iarduino.ru/shop/Expansion-payments/trema-shield.html) +Подробнее о [подключении модуля](https://wiki.iarduino.ru/page/chasy-realnogo-vremeni-rtc-trema-modul/) +![enter image description here](https://iarduino.ru/img/upload/6a83fe7f3deb2f48d1408daac49284ba.png) + +| Модель | Ссылка на магазин| +|--|--| +| DS1307 ![enter image description here](https://wiki.iarduino.ru/img/resources/643/643.svg) | https://iarduino.ru/shop/Expansion-payments/chasy-realnogo-vremeni-rtc-trema-modul.html| +| DS3231 ![enter image description here](https://wiki.iarduino.ru/img/resources/877/877.svg) | https://iarduino.ru/shop/Expansion-payments/chasy-realnogo-vremeni-rtc-trema-modul-v2-0.html | + + + +## Описание библиотеки: +Библиотека позволяет читать и записывать время RTC модулей на базе чипов: DS1302, [DS1307](http://iarduino.ru/shop/Expansion-payments/chasy-realnogo-vremeni-rtc-trema-modul.html), [DS3231](http://iarduino.ru/shop/Expansion-payments/chasy-realnogo-vremeni-rtc-trema-modul-v2-0.html), … +Преимуществом данной библиотеки является удобная реализация получения времени. +**[ Подробное описание, подключение и примеры работы ](https://wiki.iarduino.ru/page/chasy-realnogo-vremeni-rtc-trema-modul/)** + +## Назначение функций и переменных: +Подробное описание работы с библиотекой, находится в разделе https://wiki.iarduino.ru/page/chasy-realnogo-vremeni-rtc-trema-modul/ + +**Подключаем библиотеку.** + + #include // Подключаем библиотеку. + + **Создаём объект.** + + + iarduino_RTC ОБЪЕКТ ( НАЗВАНИЕ [, ВЫВОД_RST [, ВЫВОД_CLK [, ВЫВОД_DAT ]]] ); // Создаём объект. + +**Инициализация работы RTC модуля.** + + Функция begin(); // Инициализация работы RTC модуля. + + **Установка времени.** + + Функция settime( СЕК [, МИН [, ЧАС [, ДЕНЬ [, МЕС [, ГОД [, ДН ]]]]]] ); // Установка времени. + + **Чтение времени.** + + Функция gettime( [ СТРОКА ] ); // Чтение времени. + +**Заставляет функцию gettime «мигать» указанным параметром времени.** + + функция blinktime( ПАРАМЕТР [ ЧАСТОТА ] ); // Заставляет функцию gettime «мигать» указанным параметром времени. + +**Указывает минимальный период обращения к модулю в минутах.** + + функция period( МИНУТЫ ); // Указывает минимальный период обращения к модулю в минутах. + +**Возвращает секунды от 0 до 59.** + + Переменная seconds // Возвращает секунды от 0 до 59. + + **Возвращает минуты от 0 до 59.** + + Переменная minutes // Возвращает минуты от 0 до 59. + +**Возвращает часы от 1 до 12.** + + Переменная hours // Возвращает часы от 1 до 12. + +**Возвращает часы от 0 до 23.** + + Переменная Hours // Возвращает часы от 0 до 23. + +**Возвращает полдень 0 или 1 (0-am, 1-pm).** + + Переменная midday // Возвращает полдень 0 или 1 (0-am, 1-pm). + +**Возвращает день месяца от 1 до 31.** + + Переменная day // Возвращает день месяца от 1 до 31. + +**Возвращает день недели от 0 до 6 (0-воскресенье, 6-суббота).** + + Переменная weekday // Возвращает день недели от 0 до 6 (0-воскресенье, 6-суббота). + +**Возвращает месяц от 1 до 12.** + + Переменная month // Возвращает месяц от 1 до 12. + +**Возвращает год от 0 до 99.** + + Переменная year // Возвращает год от 0 до 99. + + + + + + + + + + + + + diff --git a/lib/iarduino_RTC/examples/gettime/gettime.ino b/lib/iarduino_RTC/examples/gettime/gettime.ino new file mode 100644 index 00000000..066b7ec9 --- /dev/null +++ b/lib/iarduino_RTC/examples/gettime/gettime.ino @@ -0,0 +1,128 @@ +// Пример считывания текущего времени: // + // +// Раскомментируйте для программной реализации шины I2C: // +// #define pin_SW_SDA 3 // Назначение любого вывода Arduino для работы в качестве линии SDA программной шины I2C. +// #define pin_SW_SCL 9 // Назначение любого вывода Arduino для работы в качестве линии SCL программной шины I2C. +// Раскомментируйте для совместимости с большинством плат: // +// #include // Библиотека 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 для работы с модулями реального времени. +// 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. + // +void setup(){ // + delay(300); // Ждем готовности модуля отвечать на запросы. + Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод. + watch.begin(); // Инициируем работу с модулем. +} // +void loop(){ // + if(millis()%1000==0){ // Если прошла 1 секунда. + Serial.println(watch.gettime("d-m-Y, H:i:s, D")); // Выводим время. + delay(1); // Приостанавливаем скетч на 1 мс, чтоб не выводить время несколько раз за 1мс. + } // +} // + // +// ====================================================== // +// ОПИСАНИЯ ПАРАМЕТРОВ ФУНКЦИЙ: +// +// • Подключение библиотеки: +// #include +// 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. \ No newline at end of file diff --git a/lib/iarduino_RTC/examples/gettimeUnix/gettimeUnix.ino b/lib/iarduino_RTC/examples/gettimeUnix/gettimeUnix.ino new file mode 100644 index 00000000..a11b0449 --- /dev/null +++ b/lib/iarduino_RTC/examples/gettimeUnix/gettimeUnix.ino @@ -0,0 +1,128 @@ +// Пример считывания секунд прошедших с начала эпохи Unix: // + // +// Раскомментируйте для программной реализации шины I2C: // +// #define pin_SW_SDA 3 // Назначение любого вывода Arduino для работы в качестве линии SDA программной шины I2C. +// #define pin_SW_SCL 9 // Назначение любого вывода Arduino для работы в качестве линии SCL программной шины I2C. +// Раскомментируйте для совместимости с большинством плат: // +// #include // Библиотека 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 для работы с модулями реального времени. +// 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. + // +void setup(){ // + delay(300); // Ждем готовности модуля отвечать на запросы. + Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод. + watch.begin(); // Инициируем работу с модулем. +} // +void loop(){ // + if (millis()%1000==0){ // Если прошла 1 секунда. + Serial.println( watch.gettimeUnix() ); // Выводим количество секунд прошедших с начала эпохи Unix (01.01.1970 00:00:00 GMT). + delay(1); // Приостанавливаем скетч на 1 мс, чтоб не выводить время несколько раз за 1мс. + } // +} // + // +// ====================================================== // +// ОПИСАНИЯ ПАРАМЕТРОВ ФУНКЦИЙ: +// +// • Подключение библиотеки: +// #include +// 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. \ No newline at end of file diff --git a/lib/iarduino_RTC/examples/getvartime/getvartime.ino b/lib/iarduino_RTC/examples/getvartime/getvartime.ino new file mode 100644 index 00000000..5653d213 --- /dev/null +++ b/lib/iarduino_RTC/examples/getvartime/getvartime.ino @@ -0,0 +1,138 @@ +// Пример считывания текущего времени в переменные: // + // +// Раскомментируйте для программной реализации шины I2C: // +// #define pin_SW_SDA 3 // Назначение любого вывода Arduino для работы в качестве линии SDA программной шины I2C. +// #define pin_SW_SCL 9 // Назначение любого вывода Arduino для работы в качестве линии SCL программной шины I2C. +// Раскомментируйте для совместимости с большинством плат: // +// #include // Библиотека 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 для работы с модулями реального времени. +// 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 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. \ No newline at end of file diff --git a/lib/iarduino_RTC/examples/setsystime/setsystime.ino b/lib/iarduino_RTC/examples/setsystime/setsystime.ino new file mode 100644 index 00000000..9c393afc --- /dev/null +++ b/lib/iarduino_RTC/examples/setsystime/setsystime.ino @@ -0,0 +1,137 @@ +// Пример установки системного времени (вашего компьютера) // + // +// Раскомментируйте для программной реализации шины I2C: // +// #define pin_SW_SDA 3 // Назначение любого вывода Arduino для работы в качестве линии SDA программной шины I2C. +// #define pin_SW_SCL 9 // Назначение любого вывода Arduino для работы в качестве линии SCL программной шины I2C. +// Раскомментируйте для совместимости с большинством плат: // +// #include // Библиотека 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 для работы с модулями реального времени. +// 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. + // +// Определяем системное время: // Время загрузки скетча. +const char* strM="JanFebMarAprMayJunJulAugSepOctNovDec"; // Определяем массив всех вариантов текстового представления текущего месяца находящегося в предопределенном макросе __DATE__. +const char* sysT=__TIME__; // Получаем время компиляции скетча в формате "SS:MM:HH". +const char* sysD=__DATE__; // Получаем дату компиляции скетча в формате "MMM:DD:YYYY", где МММ - текстовое представление текущего месяца, например: Jul. +// Парсим полученные значения в массив: // Определяем массив «i» из 6 элементов типа int, содержащий следующие значения: секунды, минуты, часы, день, месяц и год компиляции скетча. +const int i[6] {(sysT[6]-'0')*10+(sysT[7]-'0'), (sysT[3]-'0')*10+(sysT[4]-'0'), (sysT[0]-'0')*10+(sysT[1]-'0'), (sysD[4]-'0')*10+(sysD[5]-'0'), ((int)memmem(strM,36,sysD,3)+3-(int)&strM[0])/3, (sysD[9]-'0')*10+(sysD[10]-'0')}; + // +void setup(){ // + delay(300); // Ждем готовности модуля отвечать на запросы. + Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод. + watch.begin(); // Инициируем работу с модулем. + watch.settime(i[0],i[1],i[2],i[3],i[4],i[5]); // Устанавливаем время в модуль: i[0] сек, i[1] мин, i[2] час, i[3] день, i[4] месяц, i[5] год, без указания дня недели. +// watch.settime(i[0],i[1],i[2],i[3],i[4],i[5], 2); // Можно установить время с указанием дня недели, где последний параметр, это день недели (указывается вручную) в формате: 0-воскресенье, 1-понедельник, ... , 6-суббота. +} // +void loop(){ // + if(millis()%1000==0){ // Если прошла 1 секунда. + Serial.println(watch.gettime("d-m-Y, H:i:s, D")); // Выводим время. + delay(1); // Приостанавливаем скетч на 1 мс, чтоб не выводить время несколько раз за 1мс. + } // +} // + // +// ====================================================== // +// ОПИСАНИЯ ПАРАМЕТРОВ ФУНКЦИЙ: +// +// • Подключение библиотеки: +// #include +// 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. \ No newline at end of file diff --git a/lib/iarduino_RTC/examples/settime/settime.ino b/lib/iarduino_RTC/examples/settime/settime.ino new file mode 100644 index 00000000..fcf4c118 --- /dev/null +++ b/lib/iarduino_RTC/examples/settime/settime.ino @@ -0,0 +1,129 @@ +// Пример установки времени модуля: // + // +// Раскомментируйте для программной реализации шины I2C: // +// #define pin_SW_SDA 3 // Назначение любого вывода Arduino для работы в качестве линии SDA программной шины I2C. +// #define pin_SW_SCL 9 // Назначение любого вывода Arduino для работы в качестве линии SCL программной шины I2C. +// Раскомментируйте для совместимости с большинством плат: // +// #include // Библиотека 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 для работы с модулями реального времени. +// 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. + // +void setup(){ // + delay(300); // Ждем готовности модуля отвечать на запросы. + Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод. + watch.begin(); // Инициируем работу с модулем. + watch.settime(0,51,21,27,10,15,2); // Записываем время в модуль: 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник. +} // +void loop(){ // + if(millis()%1000==0){ // Если прошла 1 секунда. + Serial.println(watch.gettime("d-m-Y, H:i:s, D")); // Выводим время. + delay(1); // Приостанавливаем скетч на 1 мс, чтоб не выводить время несколько раз за 1мс. + } // +} // + // +// ====================================================== // +// ОПИСАНИЯ ПАРАМЕТРОВ ФУНКЦИЙ: +// +// • Подключение библиотеки: +// #include +// 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. \ No newline at end of file diff --git a/lib/iarduino_RTC/examples/settimeUnix/settimeUnix.ino b/lib/iarduino_RTC/examples/settimeUnix/settimeUnix.ino new file mode 100644 index 00000000..0c6e9b8d --- /dev/null +++ b/lib/iarduino_RTC/examples/settimeUnix/settimeUnix.ino @@ -0,0 +1,129 @@ +// Пример установки времени модуля значением Unix time: // + // +// Раскомментируйте для программной реализации шины I2C: // +// #define pin_SW_SDA 3 // Назначение любого вывода Arduino для работы в качестве линии SDA программной шины I2C. +// #define pin_SW_SCL 9 // Назначение любого вывода Arduino для работы в качестве линии SCL программной шины I2C. +// Раскомментируйте для совместимости с большинством плат: // +// #include // Библиотека 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 для работы с модулями реального времени. +// 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. + // +void setup(){ // + delay(300); // Ждем готовности модуля отвечать на запросы. + Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод. + watch.begin(); // Инициируем работу с модулем. + watch.settimeUnix(1577836800); // Записываем время в модуль: 01.01.1970 00:00:00 (дата начала эпохи Unix) + 1577836800 сек = 01.01.2020 00:00:00. +} // +void loop(){ // + if(millis()%1000==0){ // Если прошла 1 секунда. + Serial.println(watch.gettime("d-m-Y, H:i:s, D")); // Выводим время. + delay(1); // Приостанавливаем скетч на 1 мс, чтоб не выводить время несколько раз за 1мс. + } // +} // + // +// ====================================================== // +// ОПИСАНИЯ ПАРАМЕТРОВ ФУНКЦИЙ: +// +// • Подключение библиотеки: +// #include +// 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. \ No newline at end of file diff --git a/lib/iarduino_RTC/extras/DS1302.pdf b/lib/iarduino_RTC/extras/DS1302.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fd672446a9b7a1fef866e50ebe78b12a5616288c GIT binary patch literal 377387 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