Различия

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

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
главная:модули:pcf8563 [2019/03/07 10:37]
smartadmin [Пример 2]
главная:модули:pcf8563 [2019/03/23 14:19] (текущий)
smartadmin
Строка 113: Строка 113:
   lcd.setCursor(2,​ 1); //​установка курсора на третью ячейку   lcd.setCursor(2,​ 1); //​установка курсора на третью ячейку
   lcd.print(rtc.formatDate());​ //​вывод даты   lcd.print(rtc.formatDate());​ //​вывод даты
 +}
 +</​file>​
 +
 +==== Пример 3. Засыпать и просыпаться по будильнику часов ====
 +В данном примере формируется минипроект - часы с будильником. Часы показывают время на черырёхразрядном индикаторе. У устройства имеется кнопка - которая переводит контроллер в режим сна до следующей минуты,​ устанавливая на часах будильник на следующую за текущей минуту. Индикацией установки будильника служит появление на индикаторе надписи "​ALAR"​ - от английского alarm (будильник). Для демонстрации того, что устройство находится в режиме сна, на дисплей выводится информация в виде четырёх тире (- - - -). По пробуждению,​ дисплей снова отображает время.
 +
 +**Библиотеки**
 +
 +Помимо библиотеки для работы с  часами,​ понадобятся библиотеки для режимов сна и модуля индикатора. Их можно загрузить со страниц в Базе Знаний:​ [[главная:​инфо:​сон|]] и [[главная:​дисплеи:​модуль4разрядногоиндикатора|]]
 +
 +^ Что нужно ​                                                                                                              ​^ ​ Кол-во,​ шт  ^
 +| [[http://​smartelements.ru/​collection/​kontrollery/​product/​kontroller-smart-uno|Контроллер Smart UNO]]                   ​| ​ 1           |
 +| [[https://​smartelements.ru/​collection/​shildy/​product/​sensor-shield|Sensor Shield]] ​                     |  1           |
 +| [[https://​smartelements.ru/​collection/​moduli/​product/​modul-chasov-pcf8563|Модуль часов PCF8563]] ​                     |  1           |
 +| [[https://​smartelements.ru/​collection/​displei-i-indikatory/​product/​modul-4-razryadnogo-indikatora-krasnyy|Модуль 4-разрядного индикатора ]]                      |  1           |
 +| [[https://​smartelements.ru/​collection/​moduli/​product/​modul-knopki|Модуль кнопки]] ​                     |  1           |
 +| [[https://​smartelements.ru/​collection/​provoda-i-kabeli/​product/​shleyf-mama-mama-h4-20-sm|Шлейф "​мама-мама"​ х4]]      |  1           |
 +| [[https://​smartelements.ru/​collection/​provoda-i-kabeli/​product/​shleyf-mama-mama-h3-20-sm|Шлейф "​мама-мама"​ х3]]      |  1           |
 +| [[https://​smartelements.ru/​collection/​provoda-i-kabeli/​product/​nabor-provodov-20-sht-20sm-mama-mama|Провода мама-мама]] ​ |  5          |
 +
 +**Скетч для загрузки**
 +<file Arduino>
 +#include "​SevenSegmentTM1637.h"​ //​подключение библиотеки для работы с дисплеем
 +#include "​SevenSegmentExtended.h"​ //​подключение расширенных функций дисплея
 +#include <​Wire.h> ​ //​библиотека для работы с I2C
 +#include <​Rtc_Pcf8563.h>​ //​библиотека для работы с часами
 +#include <​Sleep_n0m1.h>​ //​подключение библиотеки для режимов сна
 +
 +const int wakeUpPin = 3; //​вывод прерывания
 +const int button = 6; //​вывод подключения кнопки
 +
 +Rtc_Pcf8563 rtc; //​инициализация часов
 +SevenSegmentExtended display(13, 12); //​создание объекта дисплея
 +Sleep sleep; //​объект для ввода контроллера в сон
 +
 +void setup() {
 +  display.begin();​ //​инициализация дисплея
 +  display.setBacklight(100);​ //​установка яркости в 100%
 +  display.print("​INIT"​);​ //​отображение надписи INIT (инициализация) на дисплее
 +  delay(1000);​ //​задержка в 1 секунду
 +  pinMode(button,​ INPUT); //​режим вывода кнопки
 +
 +}
 +
 +void loop() {
 +
 +  rtc.getTime();​ //​получение времени с часов
 +  byte hour = rtc.getHour();​ //​запись в переменную количество часов
 +  byte minute = rtc.getMinute();​ //​запись в переменную количество минут
 +  display.printTime(hour,​ minute, false); //​вывод времени
 +
 +  if (digitalRead(button)) { //была нажата кнопка
 +
 +    set_alarm(minute);​ //​установить будильник
 +
 +    display.print("​----"​);​ //​вывести четыре тире, означающие что контроллер спит
 +
 +    sleep.pwrDownMode();​ //​установка режима сна PWR_DOWN
 +
 +    //сон будет продолжаться пока на выводе wakeUpPin не поменяется уровень сигнала
 +    //в данном случае с "​HIGH"​ на "​LOW"​
 +    sleep.sleepPinInterrupt(wakeUpPin,​ FALLING); //​(номер вывода прерывания,​ состояние прерывания)
 +
 +    //​очистка будильника
 +    clr_alarm();​
 +  }
 +}
 +
 +/* Процедура очищает регистры будильника на часах.
 + ​* ​ Требуется для корректной работы модуля часов.
 + */
 +void clr_alarm() {
 +  detachInterrupt(1);​ //​отключить прерывание номер 1 (вывод контроллера - 3)
 +
 +  rtc.clearAlarm();​ //​очистить будильник
 +  delay(1000);​ //​секундная задержка
 +}
 +
 +/* Процедура устанавливает будильник на часах на одну минуту больше.
 + ​* ​ Здесь можно устанавливать будильник на любое время методом setAlarm(), ​
 + ​* ​ который принимает четыре параметра:​
 + ​* ​ - минуты будильника
 + ​* ​ - часы будильника
 + ​* ​ - день будильника
 + ​* ​ - день недели будильника
 + ​* ​ Если любое из значений равно 99 - значит берется значение текущего времени.
 + */
 +void set_alarm(const int& minute) {
 +
 +  rtc.setAlarm(minute + 1, 99, 99, 99); //​установка будильника на одну минуту
 +
 +  display.clear();​ //​очистить дисплей
 +  display.print("​ALAR"​);​ //​вывести надпись ALAR (ALARM)
 +  delay(1000);​ //​подождать секунду
 +  display.clear();​ //​очистить дисплей
 } }
 </​file>​ </​file>​