Корректность кода проверки времени

Всем привет. Необходимо включить реле в определенное время и выключить и снова включить и выключить по времени.

int set_on0 = 8;       
int set_off0= 10;       

int set_on1 = 17;        
int set_off1= 23;        

if(set_on0 == set_off0){
  digitalWrite(Relay, LOW);
}

if(set_on1 == set_off1){
  digitalWrite(Relay, LOW);
}


if (now.hour() >= set_on0 && now.hour() <= set_off0)
 { 
   digitalWrite(Relay, HIGH);
 } 
 else if (now.hour() >= set_on1 && now.hour() < set_off1)
 {
   digitalWrite(Relay, HIGH);
 } 
 else 
 {
   digitalWrite(Relay, LOW);
 }

На сколько корректно условие проверки времени???

Что за бред? Когда оно по вашему выполнится? И это я ещё дальше читать не стал.
К тому же код не полный. Что за объект (или структура) now?

Функция now() библиотеки Time возвращает текущее время в формате time_t

Да это из библиотеки ds1307. С верхним согласен, чет тупал, на самом деле не выполнится.

if (now.hour() >= set_on0 && now.hour() < set_off0)
{
digitalWrite(Relay, HIGH);
}
else if (now.hour() >= set_on1 && now.hour() < set_off1)
{
digitalWrite(Relay, HIGH);
}
else
{
digitalWrite(Relay, LOW);
}

Сейчас с другим столкнулся. Если set_off1 задано 23 часа, то все работает четко

int set_off1 = 23;

if (now.hour() >= set_on1 && now.hour() < set_off1)
{
digitalWrite(Relay, HIGH);
}

, но если поставить set_off1 = 00, то условие не выполняется ((( Почему так происходит??? СПАСИБО

А какой час может быть меньше 0, чтобы условие хотя бы имело шанс исполнится?

1 лайк

ХЗ! Код приведён не полностью.

Спасибо, все исправил.
‘’’
if (now.hour() >= set_on0 && now.hour() < set_off0)
{
digitalWrite(Relay, HIGH);
}
else if (now.hour() >= set_on1 && (now.hour() <= set_off1 && now.minute() <= set_offmin1))
{
digitalWrite(Relay, HIGH);
}
else
{
digitalWrite(Relay, LOW);
}

‘’’

А давно ли объект стал функцией?

На будущее - если у вас время начала и конца интервала задано не только в часах, но еще и в минутах - удобнее перевести все интервалы в “минуты после полуночи” ( то есть now.hour() * 60 + now.minute()) - считать будет проще.

3 лайка

Спасибо. Вот об этом в книгах не пишут. )))

Пишут. Это Вы не читаете :frowning:

видимо читает, но не те )))