Arduino:Примеры/TimeArduinoDue
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Синхронизация времени с помощью RTC (для Arduino Due)[1]
Это скетч для библиотеки Time и платы Arduino, который демонстрирует, как использовать эту библиотеку вместе с часами реального времени (или просто RTC). Этот пример создан специально для Arduino Due.
Код
/*
Синхронизация времени с помощью RTC (Для Arduino Due)
Пример, демонстрирующий работу библиотеки Time с RTC
(от «Real Time Clock», что значит «часы реального времени»).
Этому скетчу требуется библиотека RTC, написанная
Маркусом Лэнжем (Markus Lange), и скачать ее можно тут:
https://github.com/MarkusLange/Arduino-Due-RTC-Library
*/
#include <TimeLib.h>
#include <rtc_clock.h>
// Выбираем источник для RTC:
//RTC_clock rtc_clock(RC);
RTC_clock rtc_clock(XTAL);
void setup() {
Serial.begin(9600);
rtc_clock.init();
if (rtc_clock.date_already_set() == 0) {
// К сожалению, если применить сброс на плате Arduino Due, то она,
// по всей видимости, не сохраняет состояние RTC.
// Маркус описывает это следующим образом: «Фых! Если использовать
// контакт NRSTB, то Due делает сброс. Причем сброс выполняется на
// всем чипе и на всех бэкап-областях, включая RTC, RTT и SC.
// Впрочем, если вместо NRSTB использовать NRST, то эти области
// сохранят свои прежние значения».
rtc_clock.set_time(__TIME__);
rtc_clock.set_date(__DATE__);
// Впрочем, это может сработать на других неофициальных платах
// на базе SAM3X с RESET-схемой, отличной от Arduino Due.
}
setSyncProvider(getArduinoDueTime);
if(timeStatus()!= timeSet)
Serial.println("Unable to sync with the RTC"); // "Не удалось синхронизироваться с RTC"
else
Serial.println("RTC has set the system time"); // "RTC настроено на системное время"
}
time_t getArduinoDueTime()
{
return rtc_clock.unixtime();
}
void loop()
{
digitalClockDisplay();
delay(1000);
}
void digitalClockDisplay(){
// печатаем время на мониторе порта:
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
}
void printDigits(int digits){
// вспомогательная функция для печати данных о времени
// на монитор порта; добавляет в начале двоеточие и ноль:
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}