Библиотека iarduino_RTC

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 4 января 2018, 13:33

Преимуществом данной библиотеки является удобная реализация получения времени.
Вы можете получать время не только через переменные (для сек., мин., часов., ...), но и одной строкой, указав, что именно в ней должно быть.
Примеры:

ВЫВОД ВРЕМЕНИ В МОНИТОР

Код: Выделить всё

//   ВЫВОД ВРЕМЕНИ В МОНИТОР:
#include <iarduino_RTC.h>                                // Подключаем библиотеку
iarduino_RTC time(RTC_DS1307);                           // Объявляем объект time для модуля на базе чипа DS1307
void setup() {
    Serial.begin(9600);                                  // Инициируем передачу данных в монитор последовательного порта
    time.begin();                                        // Инициируем RTC модуль
}
void loop(){
    if(millis()%1000==0){                                // если прошла 1 секунда
        Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время в монитор, одной строкой
        delay(2);                                        // приостанавливаем скетч на 2 мс.
    }
}

УСТАНОВКА ВРЕМЕНИ МОДУЛЯ:

Код: Выделить всё

//  УСТАНОВКА ВРЕМЕНИ МОДУЛЯ:
#include <iarduino_RTC.h>                                // Подключаем библиотеку
iarduino_RTC time(RTC_DS1307);                           // Объявляем объект time для модуля на базе чипа DS1307
void setup() {
    Serial.begin(9600);                                  // Инициируем передачу данных в монитор последовательного порта
    time.begin();                                        // Инициируем RTC модуль
    time.settime(0,51,21,27,10,15,2);                    // Устанавливаем время: 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
}
void loop(){
    if(millis()%1000==0){                                // если прошла 1 секунда
        Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время в монитор, одной строкой
        delay(2);                                        // приостанавливаем скетч на 2 мс.
    }

БУДИЛЬНИК:

Код: Выделить всё

//  БУДИЛЬНИК:
#include <iarduino_RTC.h>                                // Подключаем библиотеку
iarduino_RTC time(RTC_DS1307);                           // Объявляем объект time для модуля на базе чипа DS1307
void setup() {
    Serial.begin(9600);                                  // Инициируем передачу данных в монитор последовательного порта
    time.begin();                                        // Инициируем RTC модуль
}
void loop(){
    if(millis()%1000==0){                                // если прошла 1 секунда
        Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время в монитор, одной строкой
        if(time.Hours==&& time.minutes==&& time.seconds==&& time.weekday!=&& time.weekday!=6){
//          Действия внутри оператора if, будут выполняться только по будням в 07:00
            Serial.println("07:00 nopa na pa6oty");      // выводим сообщение
        }
        delay(2);                                        // приостанавливаем скетч на 2 мс.
    }

В библиотеке реализовано пять функций: три основных (begin, settime, gettime) и две дополнительных (blinktime, period).
Описание функций библиотеки:

Данная библиотека может использовать как аппаратную, так и программную реализацию шины I2C.
Подключение библиотеки:

Код: Выделить всё

#include <iarduino_RTC.h>                     // Подключаем библиотеку 
iarduino_RTC time(RTC_DS3231);                // Создаём объект time, если модуль создан на базе чипа DS3231 
iarduino_RTC time(RTC_DS1307);                // Создаём объект time, если модуль создан на базе чипа DS1307
iarduino_RTC time(RTC_DS1302, RST, CLK, DAT); // Создаём объект time, если модуль создан на базе чипа DS1302   

Функция begin();

Назначение: инициализация RTC модуля
Синтаксис: begin();
Параметры: Нет.
Возвращаемые значения: Нет.
Примечание:
Функция вызывается 1 раз в коде setup.
Проверяет регистры модуля, запускает генератор модуля и т.д.
Пример:

Код: Выделить всё

time.begin(); // Инициируем работу с модулем реального времени   

Функция settime();

Назначение: Установка времени.
Синтаксис: settime( СЕКУНДЫ [, МИНУТЫ [, ЧАСЫ [, ДЕНЬ [, МЕСЯЦ [, ГОД [, ДЕНЬ_НЕДЕЛИ ]]]]]] );
Параметры:
СЕКУНДЫ - число от 0 до 59, или -1.
МИНУТЫ - число от 0 до 59, или -1.
ЧАСЫ - число от 0 до 23, или -1.
ДЕНЬ - число от 1 до 31, или -1.
МЕСЯЦ - число от 1 до 12, или -1.
ГОД - число от 0 до 99 (без учёта века), или -1.
ДЕНЬ_НЕДЕЛИ - число от 0 (воскресение) до 6 (суббота), или -1.
Возвращаемые значения: Нет.
Примечание:
Значение параметров -1 означает, что данный параметр устанавливать ненужно.
Все параметры, кроме секунд, являются необязательными.
Пример:

Код: Выделить всё

time.settime(-1, -1, 10);   // установит 10 часов, а секунды, минуты и дату, оставит без изменений.
time.settime(30, -1, -1, 2) // установит 30 секунд и 2 день месяца, остальные данные оставит без изменений  

Функция gettime();
Назначение: Чтение времени.
Синтаксис: gettime( [ "СТРОКА_ШАБЛОН" ] );
Параметры:
СТРОКА_ШАБЛОН - задаёт шаблон для вывода строки времени, как у функции 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 (два знака, в верхнем регистре)
Возвращаемые значения: Строка шаблона, указанные символы которой заменены на время.
Примечание:
Строка не должна превышать 50 символов.
Функцию можно вызывать без параметра, это приведёт к выводу пустой строки и обновлению переменных (см. ниже).
Пример:

Код: Выделить всё

Serial.println( time.gettime("d-m-Y, H:i:s, D") ); // выведет строку "01-10-2015, 14:00:05, Thu" и обновит значение переменных.
Serial.println( time.gettime("s")               ); // выведет строку "05" и обновит значение переменных.  

Переменная seconds
Значение: Возвращает количество секунд, от 0 до 59;
Тип данных: uint8_t.

Переменная minutes
Значение: Возвращает количество минут, от 0 до 59;
Тип данных: uint8_t.

Переменная hours
Значение: Возвращает количество часов, от 1 до 12;
Тип данных: uint8_t.

Переменная Hours
Значение: Возвращает количество часов, от 0 до 23;
Тип данных: uint8_t.

Переменная midday
Значение: Возвращает значение 0 или 1 (0-am, 1-pm);
Тип данных: uint8_t.

Переменная day
Значение: Возвращает день месяца, от 1 до 31;
Тип данных: uint8_t.

Переменная weekday
Значение: Возвращает день недели, от 0 до 6 (0-воскресенье, 6-суббота);
Тип данных: uint8_t.

Переменная month
Значение: Возвращает текущий месяц, от 1 до 12;
Тип данных: uint8_t.

Переменная year
Значение: Возвращает текущий год, от 0 до 99;
Тип данных: uint8_t.

Код: Выделить всё

time.gettime();                 // читаем время, обновляя значения всех переменных.
Serial.printlntime.seconds ); // выведет число - количество секунд
Serial.printlntime.minutes ); // выведет число - количество минут
Serial.printlntime.hours   ); // выведет число - количество часов в 12 часовом формате
Serial.printlntime.Hours   ); // выведет число - количество часов в 24 часовом формате
Serial.printlntime.midday  ); // выведет число - 0 (до полудня), или 1 (после полудня)
Serial.printlntime.day     ); // выведет число - текущий день месяца
Serial.printlntime.weekday ); // выведет число - текущий день недели: 0 (воскресение), 1 (понедельник), ... , 5 (пятница), 6 (суббота)
Serial.printlntime.month   ); // выведет число - текущий месяц
Serial.printlntime.year    ); // выведет число - текущий год 

Дополнительные функции:

Функция blinktime();
Назначение: мигание одним из параметров времени.
Указывает функции gettime(), каждую чётную секунду, заменять указанный параметр времени на пробел(ы).
Может быть полезна, для отображения устанавливаемого параметра времени на дисплее.
Синтаксис: blinktime( ПАРАМЕТР_ВРЕМЕНИ [, ЧАСТОТА_МИГАНИЯ ] );
Параметры:
ПАРАМЕТР_ВРЕМЕНИ - число от 0 до 8:
0 не мигать
1 мигают секунды
2 мигают минуты
3 мигают часы
4 мигает день
5 мигает месяц
6 мигает год
7 мигает день недели
8 мигает полдень (AM/PM)
ЧАСТОТА_МИГАНИЯ - число типа float определяющее частоту мигания в Гц (по умолчанию 1 Гц).
Возвращаемые значения: Нет.
Примечание: Значение по умолчанию 0.
Пример:

Код: Выделить всё

void setup(){
  
Serial.begin9600 );    // Инициируем передачу данных в монитор последовательного порта
  
time.begin();            // Инициируем работу с модулем RTC
  
time.blinktime);     // Заставляем функцию gettime мигать минутами с частотой по умолчанию
//time.blinktime( 2 , 5 ); // Заставляем функцию gettime мигать минутами с частотой 5 Гц (5 раз в секунду)
}
void loop(){
  
Serial.printlntime.gettime("H:i:s") ); // будет выводить время, но минуты будут мигать

Функция period();
Назначение: установка минимального периода обращения к модулю в минутах.
Означает что в указанный период времени, к модулю может быть отправлен только 1 запрос на получение времени.
Ответом на все остальные запросы будет результат последнего полученного времени + время прошедшее с этого запроса.
Функция может быть полезна, если шина передачи данных сильно нагружена другими устройствами.
Синтаксис: period( ПЕРИОД );
Параметры:
ПЕРИОД - количество минут от 0 до 255, в течении которого к модулю может быть отправлен только 1 запрос. Если указан 0, значит каждый вызов функции gettime() генерирует запрос к модулю.
Возвращаемые значения: Нет.
Примечание: Значение по умолчанию 0.
Пример:

Код: Выделить всё

void setup(){
  
Serial.begin9600 );  // Инициируем передачу данных в монитор последовательного порта
  
time.begin();          // Инициируем работу с модулем RTC
  
time.period);      // Указываем обращаться к модулю RTC не чаще чем один раз в минуту
}
void loop(){
  
Serial.printlntime.gettime("H:i:s") ); // будет выводить время как обычно, но на самом деле, обращение к модулю и сверка времени происходит 1 раз в минуту
[center]i love you [s]mxIni[/s] Mysql[/center]


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Программирование»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 8 гостей
Боты: Yandex [Bot]