Данный урок предназначен для закрепления навыков подключения, первоначальной настройки, вывода времени на  на LCD дисплей и использования в различных системах модуля часов реального времени DS1302

ПЕРЕЧЕНЬ КОМПОНЕНТОВ СХЕМЫ

  • ARDUINO UNO R3 (оригинальная плата)
  • LCD дисплей 16х2 с модулем I2C
  • Датчик DHT11 (температура, влажность)
  • Модуль часов реального времени DS1302  или DS1302N

МАКЕТ СХЕМЫ

КОД ПРОГРАММЫ

Для начала приведем полный код программы, не отвлекаясь на комментарии. Так проще понять масштабы «бедствия» для нашего мозга при анализе представленного кода.

Теперь давайте разберем программу подробнее…

Первый блок вам должен быть уже знаком по Урокам 2 и 3. Здесь мы подключаем библиотеки шины I2C и LCD дисплея 16х2.

Стоит еще раз отметить, что в строке 7 первым значением в скобках стоит назначаемый адрес для дисплея (0х27). Если адрес указан верно, то в момент запуска программы вы будете наблюдать секундное выключение дисплея и последующее включение с нужной информацией. Если это не произошло, адрес указан не верно. На занятиях нам попадались дисплеи с адресом 0х30.

Продолжаем анализ. Следующим шагом подключаем библиотеку Модуля реального времени DS1302. В разделе загрузок представлена библиотека, использующаяся на наших уроках. Она полностью работоспособна в рамках наших проектов. На просторах Интернета можно найти с десяток библиотек. Мы перепробовали несколько и остановились на этой.

Давайте тут остановимся поподробней. В строке 11 мы определяем имя rtc, по которому станем обращаться к модулю . В скобках назначаем пины (см. макет схемы):

  • 8 pin — пин CLK на модуле;
  • 7 pin — пин DAT на модуле;
  • 6 pin — пин RST на модуле.

Далее, в строках 13-24, описывается функция для получения удобочитаемого названия дня недели. Тут у тех, кто не знаком с программированием в С++ и его клонах, может возникнуть недопонимание, что такое Time::Day.

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

Time::kSunday; Time::kMonday; Time::kTuesday; Time::kWednesday;
Time::kThursday; Time::kFriday; Time::kSaturday.

Значения этих констант прописаны в самой библиотеке и соответствуют номеру дня недели от 1 до 7. Вот поэтому мы и можем использовать switch … case для решения этой задачи.

Далее проще… подключение библиотеки и инициализация датчика DHT11 описана в Уроке 3.

В блоке setup можно произвести начальную установку модуля. Для этого последовательно указываем год, месяц, день, час, минуты, секунды и день недели. Данный набор значений обозначаем именем t.

В нашем случае инициализация не производится rtc.time ();, т.к. она была сделана ранее и при последующих корректировках скетча не нужна. А вот при первой загрузке скетча 38 строка выглядела так: rtc.time (t);

Далее идет основной блок программы…