Помогите решить вопрос по таймеру

Frost56rus
Offline
Зарегистрирован: 14.08.2020

Добрый день, уважаемые, подскажите плиз по коду, я после php  на c++ так себе. 

Нужно настроить реле включение в с 6 утра до 10 утра и потом с 6 вечера до 10 вечера.

Я написал такой код: 

 

    if((myRTC.hours >= 6) && (myRTC.hours<= 9)) //лень писать коммент тут и так понятно
    {
      digitalWrite(PIN_RELAY, HIGH); //включить свет утро
    }
      else {
        digitalWrite(PIN_RELAY, LOW);
        }
    if((myRTC.hours >= 18) && (myRTC.hours<= 21)) //лень писать коммент тут и так понятно
    {
      digitalWrite(PIN_RELAY, HIGH); //включить свет вечер
    }
      else {
        digitalWrite(PIN_RELAY, LOW);
        }


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

rkit
Offline
Зарегистрирован: 23.11.2016

Ну про пхп можно было и не заливать, ты даже базовой логики не знаешь.

digitalWrite(PIN_RELAY, ((myRTC.hours >= 6) && (myRTC.hours<= 9)) || ((myRTC.hours >= 18) && (myRTC.hours<= 21)));

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020
digitalWrite(PIN_RELAY, HIGH); //включить свет

И чуть ниже

Цитата:
Реле активно в режиме низкого уровня

Как-то не вяжется ))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Она у Вас будет постоянно мигать, т.к. хотя бы одна из строк №№6 или 13 будет срабатыва всегда (от слова совсем всегда)

Frost56rus пишет:

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

Ну, про это Вам уже написали.

Можно, конечно объяснить и подробнее, да только 

Frost56rus пишет:

 //лень писать коммент тут и так понятно

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

rkit пишет:

Ну про пхп можно было и не заливать, ты даже базовой логики не знаешь.

digitalWrite(PIN_RELAY, ((myRTC.hours >= 6) && (myRTC.hours<= 9)) || ((myRTC.hours >= 18) && (myRTC.hours<= 21)));

видимо digitalWrite(PIN_RELAY, !((myRTC.hours >= 6) && (myRTC.hours<= 9)) || ((myRTC.hours >= 18) && (myRTC.hours<= 21)));

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017
bool isTimeBeetwen(const uint8_t AHour, const uint8_t AMinHour, const uint8_t AMaxHour) {
    return ((AHour >= AMinHour) && (AHour < AMaxHour));
}
.
.
.
uint8_t CurrentHour = myRTC.hours();
bool      EnableRelay = ((isTimeBeetween(6,10) || isTimeBeetwen(18,22));

digitalWrite(RELAY_PIN, EnableRelay);

Если реле управляется нулем, логику сам перевернёшь, на это ниточки между ушами должно хватить, даже у пыхапэшника.  А вот когда у тебя интервал будет включать в себя полночь, вот тогда мы посмеемся вместе. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Хотя...  Надо было лучше написать: 

лень писать тут и так понятно

Frost56rus
Offline
Зарегистрирован: 14.08.2020

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а как жеж Вечный спор Сишников кто уложит программу в меньшее число строк?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ua6em пишет:

а как жеж Вечный спор Сишников кто уложит программу в меньшее число строк?

Я не Сишник, я пишу длинный, но самодокументированный код, я так привык. Чесноговоря, в эпоху Intellisence совершенно похрен по времени как писать  h = 15; или Hours = 15; только в первом случае я через год буду разбираться, что значит "h", а во втором - нет.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

От комментария "// Лень писать комментарий" мой когнитивный аппарат аварийно перезагрузился