Arduino:Примеры/TimeTeensy3

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (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 }

См.также

Внешние ссылки