Проблема с диапазоном времени

Apocalyps
Offline
Зарегистрирован: 26.07.2015

Не могу заставить работать свечение светодиода в определенном промежутке времени. Если ставить всё в пределах одного часа(например от 10:30 до 10:55), то всё работает. А вот если указан диапазон от 10:30 до 11:20, то в включается он в нужное время, но вот выключается он при переходе в новый час(11:00). Подскажите, как это вылечить? Вот условие из скетча:

  if ((rtc_h >= onlight1_h && rtc_m >= onlight1_m) && (rtc_h <= offlight1_h && rtc_m <= offlight1_m)) {
    digitalWrite(led1, HIGH);
  }  else  {
    digitalWrite(led1, LOW);
  }
  if ((rtc_h >= onlight2_h && rtc_m >= onlight2_m) && (rtc_h <= offlight2_h && rtc_m <= offlight2_m)) {
    digitalWrite(led2, HIGH);
  }  else  {
    digitalWrite(led2, LOW);
  }

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

ну, и где у тебя в коде 10 и 30 или 10 и 55?

*дал бы по лбу хрустальным шаром.

Apocalyps
Offline
Зарегистрирован: 26.07.2015

малость это не учел)

Распишу по переменным:

rtc_h - текущий час

rtc_m - текущие минуты

onlight1_h - час включения светодиода

onlight1_m -  минуты включения светодиода,

offlight1_h - час отключения

offlight1_m - минуты отключения

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

ок.

ну, значит как-то так должно быть:

if (rtc_h ==  onlight1_h && rtc_m ==  onlight1_m) {digitalWrite(led1, HIGH);}
if (rtc_h == offlight1_h && rtc_m == offlight1_m) {digitalWrite(led1, LOW );}

и не говори, что у тебя эти условия проверяются реже 1 минуты и поэтому нужно '<' и '>'

T.Rook
Offline
Зарегистрирован: 05.03.2016

Apocalyps пишет:

Не могу заставить работать ........, то в включается он в нужное время, но вот выключается он при переходе в новый час(11:00). Подскажите, как это вылечить? Вот условие из скетча:

  if ((rtc_h >= onlight1_h && rtc_m >= onlight1_m) && (rtc_h <= offlight1_h && rtc_m <= offlight1_m)) {
    digitalWrite(led1, HIGH);
  }  else  {
    digitalWrite(led1, LOW);
  }
  if ((rtc_h >= onlight2_h && rtc_m >= onlight2_m) && (rtc_h <= offlight2_h && rtc_m <= offlight2_m)) {
    digitalWrite(led2, HIGH);
  }  else  {
    digitalWrite(led2, LOW);
  }

 

Э-хе-хех....Вы наверное имели в виду:

if ( 

( //условие включения

 (rtc_h onlight1_h && rtc_m >= onligth1_m)     // час равен  И минуты больше

|| (rtc_h > onligth1_h)                                         // или час больше

)

&&  (тоже самое для времени выкл...)  )

Хотя #3  все показано просто и ясно (если, конечно, Вы управляете вкл/выкл только из одного места).