/
jazonvisor
/
GrayBox
Обзор
Документация
Войти
/
jazonvisor
/
GrayBox
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Relay.cpp
86 строк
4 KB
jazon
Шаг первый - настройка 4-х каналов реле
14 дек 2024, 23:13
14 дек 2024, 23:13
f0e54ff
Код
Авторство
О чём код?
/**/ #include "Relay.h" /*Статический счетчик количества объектов управления*/ uint8_t Relay::objCount=0; /*Конструктор*/ Relay::Relay(uint8_t pinUsed){ /*Привязываемся к указанному пину, назначаем режим работы*/ pinMode(pinUsed,OUTPUT); /**/ this->pinUsed=pinUsed; /*Для сохрания промежуточного состояния объекта управления*/ marker=false; /*Флаг доступности управления*/ isActive=false; /*Статическая переменная для сохранения количества объектов*/ objCount++; /*Назначаем уникальный номер для объекта управления*/ number=objCount; /*Режим по умолчанию Direct(Прямое управление)*/ MODE=DIRECT; } /*Управление объектом, установка флага доступности управления*/ void Relay::SetActivity(bool enable){ /*Первым делом проверям временные уставки, если числа равны то сбросить флаг доступности управления*/ /*простыми словами - при равных уставках времени включения/выключения невозможно корректно управлять*/ /*объектом. Но если уставки различаются, флаг доступности управления должен быть установлен.*/ (timeon==timeoff)? isActive=false: enable?isActive=true:isActive=false; } /*Управление объектом, выбор режима работы*/ void Relay::SetMode(uint8_t MODE){ this->MODE=MODE; } /*Управление объектом, режим "Прямое включение/выключение"*/ void Relay::DirectControl(bool operation){ if(operation) marker=true; else marker=false; /*Записываем состояние маркера назначенному пину*/ digitalWrite(pinUsed,marker); } /*Управление объектом, получение текущего времени в виде форматированного целого типа uint32_t*/ void Relay::DailyControl(uint32_t value){ /*Если управление объектом доступно*/ if(isActive){ /*Никаких преобразований не требуется, просто сохраняем в переменной*/ currtime=value; /**/ if(timeon<timeoff){ /**/ if(currtime>=timeon && currtime<timeoff) DirectControl(ON); else DirectControl(OFF); }else{ if(timeon>timeoff){ if(currtime>=timeoff && currtime<timeon) DirectControl(OFF); else DirectControl(ON); } }/*Иначе, не управлять объектом никак.*/ }else DirectControl(OFF); } /*Управление объектом, получение текущего времени в строке*/ void Relay::DailyControl(char* value){ /*Полученную из аргумента строку преобразуем в целое число*/ currtime=atol(value); /*Вызываем перегруженный метод DailyControl, в качестве аргумета передаём время в виде числа uint32_t*/ DailyControl(currtime); } /*Установка времени включения/выключения*/ void Relay::SetOnOffTime(uint32_t timeon,uint32_t timeoff){ this->timeon=timeon; this->timeoff=timeoff; }