По времени работы реле

Dmitriysokol
Offline
Зарегистрирован: 03.06.2016

У меня такая проблемка, надо чтобы ПИН включался при определнный условиях на заднное время, а потом отключался . Но на практике выходит, что он включается и тут же выключается. ВОт код, подскажите, можешь где косяк? 

 if (p1>p2 && p2<temper && OKNO_AVT && rel_okno_temp_bol==0)
    {
      new_millis_temp_bol = 0;                                      //обнуляем переменную времени и
      new_millis_temp_bol = millis();                               //засекаем время, через сколько после изменения температуры начать реагировать
      rel_okno_temp_bol = 1;                                        // выключаем флаг, чтобы среагировать только один раз
      rel_okno_on = 0;                                              //включаем флаг, чтобы один раз засечь время
    }
    if(!rel_okno_on && millis()-new_millis_temp_bol >= time_okno_start)
    {

        digitalWrite(oknoPin, LOW);                                 //открываем окно
        new_millis_okno_avt_bol = millis();                          //засекаем время открытия окна
        rel_okno_on = 1;                                               // убираем флаг, чтобы сюда не возвращаться, пока условия температур снова не изменятся
        
      }
 if (millis() - new_millis_okno_avt_bol >= time_on_okno)        //если время открытия окна более заданной величины
      {
        digitalWrite(oknoPin, HIGH);                                //то выключаем реле 
        new_millis_okno_avt_bol = 0;                                 // и обнуляем переменную времени
      } 

 

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

Как описаны переменные? ХЗ!

Какие у них изначальные значения? ХЗ!

Ну, и ответ на вопрос такой же - ХЗ!

Dmitriysokol
Offline
Зарегистрирован: 03.06.2016
Евгений, 



pinMode(oknoPin, OUTPUT);

unsigned long new_millis_okno = 0;  // переменная для хранения времени открытия окна
unsigned long new_millis_temp_bol = 0; // переменная для времени, когда текущая температура больше заданной
unsigned long new_millis_okno_avt_bol = 0;


int time_on_okno = 10000;          //переменная времени открытия окна
int time_okno_start = 30000;       //переменная времени начала реагирования после отклонения температуры

 

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

Ну, там же ещё куча всего. Например, rel_okno_on , rel_okno_temp_bol, OKNO_AVT, ...

Дмитрий, мы теряем время. Без текста апрограммы говорить неочем.

Ну, вот смотрите.

Допустим, Ваша программа запустилась и пока условия в строках 1 и 8 НЕ верны. Программа крутится себе 10 секунд. А через 10 секунд становится истинным условие в строке 16 и выполняется код в строках 18 и 19. Ещё через 10 секунд история повторяется. И так каждые 10 секунд. При этом код в строка 3-6 и 10-13 так пока ещё ни разу и не выполнялся.

Это то, что Вам нужно?

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