Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/TimeTeensy3

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Синхронизация времени с помощью 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. }

См.также

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

  1. github.com - TimeTeensy3.ino