Arduino текущее время

Проект 11. Часы

Устройство часы в представлении не требуется. Устройство показывает текущее время.

Описание работы:

Для начала работы подключите питание к Arduino. На индикаторе появится текущее время. Для настройки времени, нажмите любую кнопку, либо зеленую, либо красную. Уменьшится яркость индикатора, значит можно настраивать время. При нажатии или удержании зеленой кнопки будут увеличиваться минуты до 59. При нажатии или удержании красной кнопки будут уменьшаться минуты до 0. При достижении минут 59, увеличивается количество часов, а значение минут установится в 0. При достижении минут 0, уменьшится количество часов, а значение минут установится в 59. При достижении часов 23, значение часов сбросится в 0, а при достижении часов 0, значение часов установится в 23. После установки нужного времени, необходимо подождать две секунды. Тогда выбранное время сохранится, индикатор увеличит свою яркость, а время пойдет как прежде.

Нам понадобится:

  • Arduino Uno х 1шт.
  • Trema Set Shield х 1шт.
  • Trema-модуль красная кнопка х 1шт.
  • Trema-модуль зеленая кнопка х 1шт.
  • Trema-модуль часы реального времени, RTC х 1шт.
  • Trema-модуль четырехразрядный LED индикатор х 1шт.

Для реализации проекта нам необходимо установить следующие библиотеки:

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE .

Схема сборки:

  • Устанавливаем Trema Set Shield в Arduino Uno.
  • Устанавливаем Trema-модуль Четырехразрядный LED индикатор во 2 посадочную площадку.

  • Устанавливаем Trema-модуль часы реального времени, RTC в 3 посадочную площадку, в верхнюю I2C колодку.

  • Полученные результат представлен ниже на рисунке.

Код программы:

Алгоритм работы:

В начале скетча (до кода setup) выполняются следующие действия:

  • Подключаем библиотеку iarduino_4LED для работы с Trema-модуль Четырехразрядным LED индикатором.
  • Объявляем объект dispLED, с указанием выводов дисплея.
  • Подключаем библиотеку iarduino_RTC для работы с Trema-модуль часами реального времени, RTC.
  • Объявляем объект time для модуля на базе чипа DS3231.
  • Объявляем пины для работы с Trema-модуль красной кнопкой и Trema-модуль зеленой кнопкой.
  • Объявляем переменные и функции задействованные в скетче.

В коде setup выполняются следующие действия:

  • Переводим выводы pinKeyGreen для зеленой кнопки и pinKeyRed для красной кнопки в режим выхода.
  • Инициируем LED дисплей.
  • Инициируем RTC модуль.
  • Задаем событие 1.

В коде loop выполняются следующие действия:

  • Читаем время, с модуля часов реального времени.
  • Устанавливаем максимальную яркость свечения индикатора.
  • Событию 1.
  • Проверяем нажата зеленая или красная кнопка. Если одна из кнопок нажата, то сохраняем текущее значение времени в переменные времени и разрешаем переход к событию 2.
  • Каждую секунду включаем и выключаем вторую точку на индикаторе. Для этого проверяем четность/нечетность приходящих секунд с модуля реального времени. Если нечетное, включаем вторую точку на индикаторе и гасим двоеточие на индикаторе, если оно присутствует на индикаторе. Если четное, то выводим на индикатор текущее время.
  • Событие 2.
  • Уменьшаем яркость свечения индикатора.
  • Включаем вторую точку на индикаторе.
  • Проверяем нажата зеленая кнопка. Если нажата, то заходим в цикл нажатия зеленой кнопки. Там фиксируем, как долго удерживается зеленая кнопка: если дольше 2 секунд , то увеличиваем быстро минуты и выводим изменение на индикатор. Как только кнопка отжата, увеличение прекратится. Если же нажата один раз зеленая кнопка, то увеличение минут произойдет один раз. Обнуляем переменную счета.
  • Проверяем нажата красная кнопка. Если нажата, то заходим в цикл нажатия красной кнопки. Там фиксируем, как долго удерживается красная кнопка: если дольше 2 секунд , то уменьшаем быстро минуты и выводим изменение на индикатор. Как только кнопка отжата, уменьшение прекратится. Если же нажата один раз красная кнопка, то уменьшение минут произойдет один раз. Обнуляем переменную счета.
  • Проверяем совершалось изменение минут. Если предыдущее значение минут совпадает с нынешним значением минут, то увеличиваем переменную счета, иначе обнуляем переменную счета.
  • Если переменная счета больше 150, то разрешаем переход к событию 1. Обнуляем переменную счета.
  • Сохраняем нынешнее значение минут в переменную предыдущего значения минут.

Источник

Arduino

Работа со временем

Функция millis()

Описание

Возвращает время в миллисекундах, прошедшее с начала выполнения программы на плате Arduino. Это число будет переполнено и сброситься до 0 примерно через 50 дней выполнения.

Синтаксис
Параметры
Возвращаемое значение

Количество миллисекунд, прошедших с момента запуска программы

Пример

Выводим значение, возвращаемое функцией millis() и ждем 1 секунду:

Функция micros()

Описание

Возвращает время в микросекундах, прошедшее с начала выполнения программы на плате Arduino. Это число будет переполнено и сброситься до 0 примерно через 70 минут выполнения.

Синтаксис
Параметры
Возвращаемое значение

Количество микросекунд, прошедших с момента запуска программы

Пример

Выводим значение, возвращаемое функцией micros() и ждем 1 секунду:

Примечания

На платах Arduino 16 МГц (например Uno и Nano) эта функция имеет разрешение в четыре микросекунды, поэтому значение всегда кратно четырем. На платах Arduino 8 МГц (например, LilyPad) эта функция имеет разрешение восемь микросекунд.

Функция delay()

Описание

Приостанавливает выполнение программы на заданноое время в миллисекундах.

Синтаксис
Параметры

ms — время в миллисекундах, на которое нужно приостановить программу

Возвращаемое значение
Пример

Мигаем встроенным светодиодом:

Примечания

Несмотря на то, что с помощью функции delay() легко создать мигающий светодиод и многие другие простые скетчи, использование функции имеет существенные недостатки. Во время приостановки программы невозможны любые манипуляции с пинами, например опрос датчиков. Также не будут работать многие математические функции. Поэтому рекомендуется в качестве альтернативы использовать функцию millis() .

Однако некоторые функции во вовремя выполнение delay() все же продолжают работать. Например, прерывания.

Функция delayMicroseconds()

Описание

Приостанавливает выполнение программы на заданное время в микросекундах.

Синтаксис
Параметры

us — время в микросекундах, на которое нужно приостановить программу

Возвращаемое значение
Пример

Посылаем последовательность импульсов с периодом раз в 100 микросекунд:

Источник

Функции времени

Задержки

Простейшей с точки зрения использования функцией времени является задержка: программа “зависает” внутри функции задержки и ожидает указанное время. Задержка позволяет очень удобно и наглядно организовать работу простой “однозадачной” программы, у нас есть два варианта задержек:

  • delay(time)
    • Задержка на указанное количество миллисекунд (мс). 1 секунда = 1’000 мс.
    • time принимает тип данных unsigned long и может приостановить выполнение на срок от 1 до 4 294 967 295 мс (

    50 суток) с разрешением 1 мс.

  • Работает на системном таймере, поэтому не работает внутри прерывания и при отключенных прерываниях.
  • delayMicroseconds(time)
    • Задержка на указанное количество микросекунд (мкс). 1 секунда = 1’000’000 мкс.
    • time принимает тип данных unsigned int и может приостановить выполнение на срок от 4 до 16383 мкс (да, меньше чем максимум для этого типа данных) с разрешением 4 мкс.
    • Работает не на таймере, а на пропуске тактов процессора, поэтому может работать в прерывании и при отключенных прерываниях.
    • Иногда не совсем корректно работает с переменными, поэтому нужно стараться использовать константы ( const или просто число).
    • Часто используется в библиотеках для эмуляции цифровых интерфейсов связи.
  • Задержки использовать очень просто:

    Мышление “задержками” – главная проблема новичков. Организовать работу сложной программы при помощи задержки – невозможно, поэтому дальше рассмотрим более полезные инструменты.

    Функция yield()

    Разработчики Arduino позаботились о том, чтобы функция delay() не просто блокировала выполнение кода, но и позволяла выполнять другой код во время этой задержки. Данный “костыль” получил название yield() и работает следующим образом: если объявить функцию

    то расположенный внутри неё код будет выполняться во время работы любой задержки delay() в программе! Это решение хоть и кажется нелепым, но в то же время позволяет быстро и без написания лишних костылей и таймеров реализовать пару параллельно выполняющихся задач. Это вполне соответствует идеологии Arduino – максимально простая и быстрая разработка прототипа. Рассмотрим простой пример: стандартный мигающий светодиод, но с опросом кнопки:

    Функции счёта времени

    Данные функции возвращают время, прошедшее с момента запуска программы, так называемый аптайм (англ. uptime). Таких функций у нас две:

      millis() – миллисекунды, тип unsigned long , от 1 до 4 294 967 295 мс (

    50 суток), разрешение 1 мс. После “переполнения” отсчёт начинается с нуля.
    micros() – микросекунды, тип unsigned long , от 4 до 4 294 967 295 мкс (

    70 минут), разрешение 4 мкс. После “переполнения” отсчёт начинается с нуля.

    Эти функции позволяют организовать программу практически любой сложности с любым количеством параллельно выполняющихся по таймеру задач. Подробнее об этом поговорим в уроке про многозадачность.

    millis() в часы и секунды

    Миллисекунды – не самый удобный способ оценить время работы программы. Можно перевести его в более человеческие часы, минуты и секунды при помощи нехитрых математических операций:

    Видео

    Источник

    OLED часы на arduino

    На днях я решил создать часы на arduino с отображением времени, текущей даты, дня недели и температуры воздуха на OLED дисплее. Что из этого получилось смотрите на видео.

    Список необходимых компонентов:

    и загружаем первый пробный скетч для проверки работоспособности дисплея и часового модуля

    после загрузки скетча у нас на дисплее отобразятся часы как на фото

    Как видим все отображается нормально, но что бы добавить русские названия дней недели нам потребуется инициализировать русские шрифты добавив строку в скетч

    и еще добавить строки которые помогут нам определить порядковый номер дня недели и отобразить название дня на русском языке.

    и еще закомментируем строки

    что бы при повторной загрузке скетча не устанавливать заново время. После этого день недели на нашем дисплее отобразится на русском языке.

    теперь изменим отображения месяца, добавив в скетч строки

    Почему надписи в скетче отображаются непонятным набором символов читайте в этой статье Русские и украинские шрифты для OLED I2C дисплея

    Теперь наши часики будут выглядеть как на фото.

    Для тех, кому было лень править скетч, ниже есть готовый скетч.

    Ну а теперь, еще более усовершенствуем наши OLED часы и добавим к ним отображение температуры, которую мы будем считывать с датчика температуры DS18B20.

    Для отображения рисунка с градусником на OLED дисплее и значка градуса выберем картинку с рисунком градусника и с помощью графического редактора сохраним ее в формате GIF с именем term.gif, и тоже самое проделаем с картинкой с значком градуса — сохраним ее как grad.gif.

    картинки должны быть двухцветными (белый и черный), доступные форматы картинок png, jpg, gif

    У меня картинка term.bmp имеет размеры 19×40 пикселей, а картинка grad.bmp 13×12 пикселей. Потом нам потребуется конвертировать две картинки с помощью онлайн-сервиса www.rinkydinkelectronics.com

    выбираем наш файл изображения и жмем Make File

    Жмем на Click here to download your file и сохраняем файл grad.c в папку с нашим скетчем, тоже самое проделываем с другим изображением. Сохраняем и закрываем скетч. При повторном открытии он будет иметь еще две вкладки с файлами изображений.

    После этого добавим две строки в скетч, которые инициализируют наши файлы изображений

    а потом отобразим наши изображения на экране OLED дисплея, добавив строки

    Добавим в наш скетч на два цикла. В первом цикле у нас будет отображаться время – назовем его void watch(); Второй цикл будет считывать и отображать температуру void temp();

    А в основном цикле void loop(); пропишем для ротации циклов несколько строчек кода

    В цикле void temp(); пропишем кусочек кода для считывания и отображения температуры

    В цикле void watch(); пропишем наш код, который отвечает за отображение времени

    После заливки скетча, наши OLED часы сначала должны отображать время, а потом температуру как на видео в начале статьи.

    Источник

    Ардуино текущее время

    Arduino Mega Server и часы реального времени

    В этой статье вы узнаете как Arduino Mega Server работает со временем и как можно создавать проекты на Ардуино, которые имеют привязку к реальному времени, вне зависимости от того, установлен ли в них «железный» RTC-модуль или нет. Все вопросы работы с реальным временем на Ардуино будут подробно разобраны и после прочтения этой статьи вы станете настоящим «мастером часовых дел».

    Суть вопроса

    Любой мало-мальски серьёзный проект на Ардуино должен иметь представление о текущем реальном времени. Например, показания датчиков должны быть привязаны ко времени (иначе никакой статистики и даже элементарных графиков невозможно будет построить), контроллер должен производить те или иные действия в зависимости от текущего времени суток, выходных, праздников и т. д. Если ваш контроллер не имеет представления о реальном времени, то он превращается в простой автомат, который может производить только элементарные действия по жёстко заданной программе.

    Поскольку Arduino Mega Server это мощная и развитая система, то такое положение дел (отсутствие работы с реальным временем) меня, да и всех остальных пользователей системы, никак не могло устроить. Поэтому вопрос интеграции в систему RTC был одним из первых на повестке дня.

    Виртуальные часы реального времени

    Всё бы ничего, но ни у меня, ни у большинства пользователей AMS не было того самого «железного» модуля RTC, поэтому было принято решение сделать «ход конём» и, в качестве временной меры, организовать часы реального времени, работающие внутри системы, без настоящего физического модуля. Что и было с успехом реализовано.

    Итак, как организовать виртуальный RTC, без настоящего модуля. Существует замечательная библиотека Time Library которая и выполняет львиную долю работы по обеспечению нас точным временем. Для начала работы с ней, её нужно скачать, разархивировать и поместить на стандартное место всех библиотек среды Arduino, а именно, в папку:

    После этого нам становятся доступны все возможности работы со временем, которые она предоставляет.

    Как это работает

    Принцип очень простой. Библиотека «запускает» виртуальные часы «внутри» контроллера и предоставляет возможность синхронизировать их множеством способов, на выбор. Вы можете выбрать тот способ, который вам больше подходит. Поскольку Arduino Mega Server это сетевое устройство, то был выбран вариант синхронизации часов через сеть с серверами точного времени. Это могут быть сервера в Интернет или сервера в локальной сети, на которых работает соответствующая служба. Например, в базовом варианте AMS часы синхронизируются с сервером MajorDoMo, и для этого ничего настраивать не нужно, всё работает «из коробки».

    Итак, для того, чтобы это заработало, нужно в начале скетча подключить соответствующие библиотеки.

    Файл Time.h это собственно библиотека для работы со временем, а остальные файлы необходимы для работы с сетью и для синхронизации времени по протоколу NTP (библиотека Ethernet тоже должна быть у вас установлена).

    Далее, вам нужно указать IP-адрес сервера, с которым вы хотите синхронизировать время

    и соответствующий порт

    но тут есть один момент: порт 8888 подходит для синхронизации в локальной сети, а в Интернет большинство серверов по нему не отвечает, поэтому, если вы планируете синхронизировать время с серверами точного времени в Интернет, то лучше установить порт 123:

    осталось только указать временную зону

    и создать объект EthernetUDP

    На этом подготовительные операции можно считать законченными и можно описывать нужную вам функциональность работы со временем. Функция инициализации:

    Здесь нужно обратить внимание на функцию

    Эта функция устанавливает источник синхронизации времени (в данном случае это NTP синхронизация через сеть). Но это может быль любой другой источник, например, физический модуль RTC. Выполнение этой функции приводит к установке источника синхронизации (на будущее) и, одновременно, к самой синхронизации времени через этот источник. Именно в момент выполнения этой функции у вас в системе «появляется» точное время.

    В самой библиотеке есть ещё одна интересная функция,

    которая позволяет задать нужный интервал между синхронизациями (задаётся в секундах, сами синхронизации происходят автоматически, без какого-либо участия с вашей стороны).

    Теперь вы можете пользоваться точным временем внутри скетча Ардуино, например, выводить в Serial монитор события не просто, а привязанными к конкретному точному времени. Делается это при помощи функции timeStamp():

    которая является обёрткой для функции serialRTC():

    Разбор механизма передачи и отображения времени в веб-интерфейсе AMS выходит за рамки данного повествования и достоин отдельной статьи и, если будет интерес, то можно будет написать продолжение и во всех подробностях объяснить, как происходит «магия» отображения времени в веб-интерфейсе Arduino Mega Server.

    Собственно, всё. Так были организованы виртуальные часы реального времени в AMS вплоть до 0.12 версии включительно и так же вы можете организовать работу с точным временем в своих проектах, даже если у вас нет физического модуля часов реального времени. Но это ещё не конец истории, а скорее, только начало.

    /*
    Modul Virtual RTC
    part of Arduino Mega Server project
    */

    IPAddress timeServer(192, 168, 2, 8);
    unsigned int localPort = 8888; // local port to listen for UDP packets
    EthernetUDP Udp;

    const int timeZone = 4;
    time_t prevDisplay = 0; // when the digital clock was displayed

    void rtcInit() <
    Udp.begin(localPort);
    Serialprint(«Waiting for NTP sync… \n»);
    setSyncProvider(getNtpTime);
    modulRtc = 1;
    >

    void rtcWorks() <
    if (timeStatus() != timeNotSet) <
    if (now() != prevDisplay) < // update the display only if time has changed
    setLifer();
    prevDisplay = now();
    //digitalClockDisplay();
    >
    >
    >

    void printDigits(int digits) <
    if(digits 0); // discard any previously received packets
    Serialprint(«Transmit NTP request\n»);
    sendNTPpacket(timeServer);
    uint32_t beginWait = millis();
    while (millis() — beginWait = NTP_PACKET_SIZE) <
    Serialprint(«Receive NTP response\n»);
    Udp.read(packetBuffer, NTP_PACKET_SIZE); // read packet into the buffer
    unsigned long secsSince1900;
    // convert four bytes starting at location 40 to a long integer
    secsSince1900 = (unsigned long)packetBuffer[40] = SECS_PER_DAY) <
    Serial.print(duration / SECS_PER_DAY);
    Serialprint(» day «);
    duration = duration % SECS_PER_DAY;
    >
    if(duration >= SECS_PER_HOUR) <
    Serial.print(duration / SECS_PER_HOUR);
    Serialprint(» hour «);
    duration = duration % SECS_PER_HOUR;
    >
    if(duration >= SECS_PER_MIN) <
    Serial.print(duration / SECS_PER_MIN);
    Serialprint(» min «);
    duration = duration % SECS_PER_MIN;
    >
    Serial.print(duration);
    Serialprint(» sec) \n»);
    >

    void checkEvent(time_t* prevEvent) <
    time_t duration = 0;
    time_t timeNow = now();

    if (*prevEvent > 0) <
    duration = timeNow — *prevEvent;
    >
    if (duration > 0) <
    showDuration(duration);
    >
    *prevEvent = timeNow;
    >

    Приятная неожиданность

    Я бы ещё долго не занялся интеграцией модулей RTC в систему (хватает и других актуальных задач), но тут, в рамках технологического сотрудничества с нашим проектом, компания CHIPSTER предоставила для тестирования и интеграции в AMS оборудование, среди которого оказались Ethernet модули на чипе W5500 и… модуль часов реального времени на чипе DS3231, что оказалось как нельзя более кстати и послужило толчком для интеграции модулей RTC в систему.

    Оказалось, что компания CHIPSTER не только торгует электронным оборудованием, но и разрабатывает собственные изделия для Arduino и автоматизации под торговой маркой Geegrow и имеет большие планы на будущее в этом направлении, в частности, у неё есть проект по выпуску специализированной версии Arduino Mega 2560 с расширенными возможностями и «заточенной» специально под Arduino Mega Server. И, если эта плата будет выпущена, то это будет очень интересное событие. Но вернёмся к часам реального времени.

    Реальные часы реального времени

    Поскольку модуль RTC оказался у меня под руками, то грех было бы не интегрировать его в систему. Благо это оказалось совсем несложно благодаря всё той же Time Library. Но обо всём по порядку.

    Для тех, кто не знает, модули реального времени бывают двух типов — «обычные» (как правило, на чипе DS1307) и «продвинутые» (на чипе DS3231, который мне и достался). Разница между ними заключается в том, что первые не очень точные и могут «убегать» очень быстро и очень сильно, а вторые это высокоточные часы с нормированным уходом не более двух минут в год, то есть реально применимые на практике. А точность достигается благодаря более сложной схемной реализации и встроенной термокомпенсации.

    Но программно обе версии модулей совместимы и работать с библиотекой и кодом будут и те и другие. Разница будет только в точности хода.

    И конечно, одним из главных свойств часов реального времени является возможность работы при отключении напряжения питания, за счёт встроенной батарейки.

    Физическое подключение

    Теперь давайте поговорим о том, как физически подключить модуль RTC к Arduino Mega Server или к вашему проекту на Ардуино. Сразу скажу, что это очень просто и вам понадобятся всего два резистора и несколько проводов.

    Подключение тривиально: вам нужно найти на своём модуле четыре контакта — GND («земля»), VCC (напряжение питания), SCL (синхросигнал), SDA (данные). Остальные контакты используются в редких и специфических случаях и вы на них можете не обращать внимания.

    Итак, вывод GND подключаем к «земле», вывод VCC — к напряжению питания контроллера. Здесь всё просто и никаких вопросов возникать не должно.

    С остальными выводами дело обстоит ненамного сложнее. Модуль RTC общается с контроллером по интерфейсу I2C, у которого всего два провода: синхронизация и данные и в контроллерах Arduino уже предусмотрены контакты для подключения этого интерфейса. У Arduino Uno это A4 (SDA) и A5 (SCL), а у arduino Mega это D20 (SDA) и D21 (SCL).

    Единственная тонкость заключается в том, что выводы SCL и SDA нужно «подтянуть» к источнику питания через резисторы 4,7 КОм. Если у вас нет точно такого номинала, то можно использовать резисторы из диапазона 2 КОм — 10 КОм.

    Программная поддержка

    Теперь осталось только дописать поддержку модуля в коде AMS или вашего проекта. Как я уже сказал, это будет очень просто потому, что с модулем будет работать всё та же библиотека Time Library. Правда нам нужно будет добавить ещё одну библиотеку, а именно DS1307RTC Library. Её тоже распаковываем и помещаем в стандартную папку для библиотек:

    Добавляем в код вашего скетча следующие строки

    Теперь мы во всеоружии и можем приступать к написанию кода самого скетча, работающего с физическим модулем RTC. В функции

    и внутреннее время Arduino Mega Server (или вашего контроллера) будет синхронизироваться с «железным» контроллером RTC, а не с серверами в Интернет или локальной сети. Таким образом, вызывая функции setSyncProvider(getNtpTime) и setSyncProvider(RTC.get) вы можете манипулировать источниками синхронизации времени и синхронизировать время так, как вам будет угодно, в зависимости от различных условий.

    Ещё одна функция, о которой вам необходимо знать, это

    которая позволяет узнать синхронизировано ли время и в зависимости от данного условия предпринять нужные действия.

    Тонкий момент

    Нужно различать две вещи: время, идущее в «железном» модуле RTC и время, идущее в вашем контроллере. Это не одно и то же. «Главным» для вас является время в контроллере, а время в модуле является лишь источником для синхронизации.

    Но! поскольку время в физическом RTC тоже постепенно «уходит», то его тоже нужно подстраивать, синхронизируя с более точными источниками, например, с серверами в Интернет.

    Поэтому, оптимальный алгоритм должен быть такой: если есть возможность, то синхронизируем все часы с серверами в Интернет, если сеть недоступна, то начинаем синхронизировать время в контроллере с модулем RTC, как только появляется сеть — переходим опять на синхронизацию через Интернет.

    Если вы находитесь в экстремальных условиях, без доступа к каким-либо источникам синхронизации, то можно вручную время от времени корректировать ход «железных» часов.

    Давайте, для примера, рассмотрим функцию синхронизации внутренних часов контроллера и модуля RTC через сеть:

    Здесь мы сначала получаем точное время по сети

    затем, в случае удачи, устанавливаем его в модуль RTC

    а затем уже из этого модуля устанавливаем время контроллера

    Начальный запуск

    Но и это ещё не всё. Существует ещё проблема начального запуска, когда модуль RTC только подключён, но время в нём не выставлено и синхронизироваться с ним поэтому нельзя. Нужно каким-то образом выставить в нём правильное время. В Arduino Mega Server существует два способа решения этой проблемы: можно синхронизировать физический RTC через сеть (если доступны сервера точного времени) или при помощи утилиты Arduino Serial Commander.

    Для установки времени в модуле RTC достаточно… нажать на кнопку. Всё остальное сделают за вас два молодца по имени Arduino Mega Server и Arduino Serial Commander. Если вы не пользуетесь AMS, а разрабатываете свой собственный проект, можете взять код из дистрибутива Arduino Mega Server (код доступен и полностью свободен) или поискать решение этой проблемы в Интернет (там есть несколько вариантов решения).

    Версия с поддержкой настоящего RTC

    Arduino Mega Server, начиная с версии 0.13, поддерживает «железный» RTC. Скачать последнюю актуальную версию вы можете с официального сайта проекта, а задать возникшие вопросы можно на форуме.

    И, конечно, я выражаю признательность компании CHIPSTER за сотрудничество и предоставленное для тестирования и интеграции оборудование (о модуле W5500 и о ускорении сетевой работы AMS я расскажу вам в одной из следующих статей).

    Дополнение. Открыт канал на Youtube и вот промо ролик Arduino Mega Server, который демонстрирует работу с реальной системой.

    Источник

    Adblock
    detector