По времени работы реле
- Войдите на сайт для отправки комментариев
Пнд, 19/09/2016 - 14:19
У меня такая проблемка, надо чтобы ПИН включался при определнный условиях на заднное время, а потом отключался . Но на практике выходит, что он включается и тут же выключается. ВОт код, подскажите, можешь где косяк?
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; // и обнуляем переменную времени }
Как описаны переменные? ХЗ!
Какие у них изначальные значения? ХЗ!
Ну, и ответ на вопрос такой же - ХЗ!
Ну, там же ещё куча всего. Например, rel_okno_on , rel_okno_temp_bol, OKNO_AVT, ...
Дмитрий, мы теряем время. Без текста апрограммы говорить неочем.
Ну, вот смотрите.
Допустим, Ваша программа запустилась и пока условия в строках 1 и 8 НЕ верны. Программа крутится себе 10 секунд. А через 10 секунд становится истинным условие в строке 16 и выполняется код в строках 18 и 19. Ещё через 10 секунд история повторяется. И так каждые 10 секунд. При этом код в строка 3-6 и 10-13 так пока ещё ни разу и не выполнялся.
Это то, что Вам нужно?
Ну, а подробнее, простите. но если текст секретный, я не буду вытягивать из Вас каждую переменную.