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

Arduino:Примеры/TimeArduinoDue

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

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

Контакты:

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


Синхронизация времени с помощью RTC (для Arduino Due)[1]

Это скетч для библиотеки Time и платы Arduino, который демонстрирует, как использовать эту библиотеку вместе с часами реального времени (или просто RTC). Этот пример создан специально для Arduino Due.

Код

  1. /*
  2.  
  3. Синхронизация времени с помощью RTC (Для Arduino Due)
  4.  
  5. Пример, демонстрирующий работу библиотеки Time с RTC 
  6. (от «Real Time Clock», что значит «часы реального времени»).
  7.  
  8. Этому скетчу требуется библиотека RTC, написанная
  9. Маркусом Лэнжем (Markus Lange), и скачать ее можно тут:
  10. https://github.com/MarkusLange/Arduino-Due-RTC-Library
  11.  
  12. */
  13.  
  14. #include <TimeLib.h>
  15. #include <rtc_clock.h>
  16.  
  17. // Выбираем источник для RTC:
  18. //RTC_clock rtc_clock(RC);
  19. RTC_clock rtc_clock(XTAL);
  20.  
  21. void setup()  {
  22.   Serial.begin(9600);
  23.   rtc_clock.init();
  24.   if (rtc_clock.date_already_set() == 0) {
  25.  
  26.     // К сожалению, если применить сброс на плате Arduino Due, то она,
  27.     // по всей видимости, не сохраняет состояние RTC.
  28.     // Маркус описывает это следующим образом: «Фых! Если использовать 
  29.     // контакт NRSTB, то Due делает сброс. Причем сброс выполняется на 
  30.     // всем чипе и на всех бэкап-областях, включая RTC, RTT и SC. 
  31.     // Впрочем, если вместо NRSTB использовать NRST, то эти области 
  32.     // сохранят свои прежние значения».
  33.  
  34.     rtc_clock.set_time(__TIME__);
  35.     rtc_clock.set_date(__DATE__);
  36.  
  37.     // Впрочем, это может сработать на других неофициальных платах 
  38.     // на базе SAM3X с RESET-схемой, отличной от Arduino Due. 
  39.   }
  40.   setSyncProvider(getArduinoDueTime);
  41.   if(timeStatus()!= timeSet) 
  42.      Serial.println("Unable to sync with the RTC");  //  "Не удалось синхронизироваться с RTC"
  43.   else
  44.      Serial.println("RTC has set the system time");  //  "RTC настроено на системное время"
  45. }
  46.  
  47. time_t getArduinoDueTime()
  48. {
  49.   return rtc_clock.unixtime();
  50. }
  51.  
  52. void loop()
  53. {
  54.    digitalClockDisplay();
  55.    delay(1000);
  56. }
  57.  
  58. void digitalClockDisplay(){
  59.   // печатаем время на мониторе порта:
  60.   Serial.print(hour());
  61.   printDigits(minute());
  62.   printDigits(second());
  63.   Serial.print(" ");
  64.   Serial.print(day());
  65.   Serial.print(" ");
  66.   Serial.print(month());
  67.   Serial.print(" ");
  68.   Serial.print(year()); 
  69.   Serial.println(); 
  70. }
  71.  
  72. void printDigits(int digits){
  73.   // вспомогательная функция для печати данных о времени 
  74.   // на монитор порта; добавляет в начале двоеточие и ноль:
  75.   Serial.print(":");
  76.   if(digits < 10)
  77.     Serial.print('0');
  78.   Serial.print(digits);
  79. }

См.также

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

  1. github.com - TimeArduinoDue.ino