Arduino:Примеры/TimeTeensy3
Перейти к навигации
Перейти к поиску
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.
Синхронизация времени с помощью RTC на Teensy[1]
Это скетч для библиотеки Time и платы Arduino, который демонстрирует, как синхронизировать время при помощи RTC на плате Teensy.
Чтобы использовать RTC на Teensy 3.0, к нижней части платы нужно подключить кристалл на 12,5 пФ и 32,768 КГц. Например, CFS-206 (Citizen), 300-8303-ND, 300-8762-ND, 300-8763-ND или 300-1002-ND (Digikey).
RTC на Teensy может работать и без батареи, но чтобы время и дата не сбрасывались, когда плата будет отключена от питания, имеет смысл подключить батарейку на 3V.
Код
1 /*
2
3 Синхронизация времени с помощью RTC на Teensy
4
5 Этот пример показывает, как синхронизировать время
6 с помощью RTC на Teensy.
7
8 */
9
10 #include <TimeLib.h>
11
12 void setup() {
13 // задаем время библиотеки Time при помощи RTC на Teensy 3.0:
14 setSyncProvider(getTeensy3Time);
15
16 Serial.begin(115200);
17 while (!Serial); // ждем открытия монитора порта в IDE Arduino Wait
18 delay(100);
19 if (timeStatus()!= timeSet) {
20 Serial.println("Unable to sync with the RTC"); // "Не удалось синхронизироваться с RTC"
21 } else {
22 Serial.println("RTC has set the system time"); // "RTC настроено на системное время"
23 }
24 }
25
26 void loop() {
27 if (Serial.available()) {
28 time_t t = processSyncMessage();
29 if (t != 0) {
30 Teensy3Clock.set(t); // задаем RTC
31 setTime(t);
32 }
33 }
34 digitalClockDisplay();
35 delay(1000);
36 }
37
38 void digitalClockDisplay() {
39 // показываем цифровые часы:
40 Serial.print(hour());
41 printDigits(minute());
42 printDigits(second());
43 Serial.print(" ");
44 Serial.print(day());
45 Serial.print(" ");
46 Serial.print(month());
47 Serial.print(" ");
48 Serial.print(year());
49 Serial.println();
50 }
51
52 time_t getTeensy3Time()
53 {
54 return Teensy3Clock.get();
55 }
56
57 /*
58
59 Код, обрабатывающий сообщения с информацией о синхронизации
60 времени, которые приходят по последовательному порту.
61
62 */
63 #define TIME_HEADER "T" // тег заголовка для сообщений
64 // с информацией о синхронизации времени,
65 // приходящих по последовательному порту.
66
67 unsigned long processSyncMessage() {
68 unsigned long pctime = 0L;
69 const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013
70
71 if(Serial.find(TIME_HEADER)) {
72 pctime = Serial.parseInt();
73 return pctime;
74 if( pctime < DEFAULT_TIME) { // проверяем, корректно ли время (больше 1 января 2013 года)
75 pctime = 0L; // если время не корректно, возвращаем «0»
76 }
77 }
78 return pctime;
79 }
80
81 void printDigits(int digits){
82 // вспомогательная функция для печати данных о времени
83 // на монитор порта; добавляет в начале двоеточие и ноль:
84 Serial.print(":");
85 if(digits < 10)
86 Serial.print('0');
87 Serial.print(digits);
88 }
См.также
Внешние ссылки