Выполнение процеса на время, при замыкание контакта
- Войдите на сайт для отправки комментариев
Втр, 28/11/2017 - 12:56
Всем Доброго времени суток. Есть такая задачка. Есть три контакта. Когда все контакти не полючают цифровой сигнал то замыкаетса 13 пин. Когда подаетса сигнал на первий и второй контакт нужно задать включение 12 пина на определенное время, после чего отключить. Когда замыкаютса все три пина 2,3,4 отключаетса 13 пин.(Это работает). А вот когда замкнутый контакт 2 и 3 пин, не могу установить включение на время 12 контакт. Прошу подскажите. Наперед спасибо всем кто подскажет.
void setup() { pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); digitalWrite(11,LOW); digitalWrite(12,LOW); digitalWrite(13,LOW); } void loop() { if ((digitalRead(2)==HIGH) && (digitalRead(3)==HIGH)) { digitalWrite(12,HIGH); } else if(digitalRead(4)==HIGH) //якщо мін і макс є контакт { digitalWrite(13,LOW);//water off digitalWrite(3,LOW); digitalWrite(11,HIGH); } else if((digitalRead(2)==LOW) && (digitalRead(4)==LOW)) //якщо мін і макс немає контакту { digitalWrite(13,HIGH); //water on } }
а где у вас инициация входных контактов.
раз работаете с тремя контактами то и в условиях прописывайте все три.
да и код перед вставкой нужно форматировать
Я считую, 2,3,4 пины
Таким способом
а кто будет настраивать их на вход ?
Нужно создать такой процес. Если есть контакт на 3 пине, то задать на 12 пине выход на 8 минут. После чего отключить питание на 12 пине. И подать питание на 12 пин при следующем получении сигнала на 3 пине.
Спасибо за помощь наперед.
Нужно создать такой процес. Если есть контакт на 3 пине, то задать на 12 пине выход на 8 минут. После чего отключить питание на 12 пине. И подать питание на 12 пин при следующем получении сигнала на 3 пине.
Спасибо за помощь наперед.
ну так где у вас инициализация входных контактов? - нету
Уже три раза вам это сказали - а вы все постите один и тот же код. Исправлять кто будет за вас?
Вот код.
где вы списали этот код? только не говорите, что это ваш - не поверю. В коде куча строк, не имеющих отношения друг к другу. Например, зачем нужна строка 28? Переменная state_mid нигде потом не используется.
По сути. Этот код не будет работать так, как вы хотите. Как только на пине 3 пропадет сигнал - условие в строке 32 станет ложным и нагрузка на пине 12 сразу выключится, без учета времени.
Очевидно, что проверять наличие сигнала на пине 3 нужно только пока нагрузка не включена. Потом этот сигнал нам не интересен, есть он или нет - мы просто ждем положенное время. Значит нужен флаг. показывающий. что нагрузка уже включена и проверять пин3 больше не надо. Как флаг можно использовать само состояние пина12, но лучше взять для этого отдельную переменную (у вас в программе она даже уже есть - work1).
Алгоритм такой -
- если нагрузка еще не работает (флаг сброшен), проверяем наличие сигнала на пине 3 - если HIGH - включаем нагрузку 12. выставляем флаг и запоминаем значение миллис
- если флаг установлен - прверяем, не прошло ли нужное время
- если флаг установлен и время истекло - выключаем пин 12 и сбрасываем флаг
Этот код действительно найден и переделан под свою ситуацию. Спасибо за подсказку. Ну тут фишка в том, что если же пропадает сигнал с 3 пина, то и 12 не зависимо прошло время или нет, должен быть разомкнут.
Вот кое что скоректировал.
Должно срабатывать.
Благодарю ёще раз за помощь.
По времени после первого срабатывания не то выходит.
Надо со временем ёще скоректировать.
Нужно создать такой процес. Если есть контакт на 3 пине, то задать на 12 пине выход на 8 минут. После чего отключить питание на 12 пине. И подать питание на 12 пин при следующем получении сигнала на 3 пине.
Может так, попробуйте!
Нужно создать такой процес. Если есть контакт на 3 пине, то задать на 12 пине выход на 8 минут. После чего отключить питание на 12 пине. И подать питание на 12 пин при следующем получении сигнала на 3 пине.
Может так, попробуйте!
Всем благодарю за помощь. Особенно vosara. Всё работает, залил, проверил. Полёт нормальный. БЛАГОДАРЮ.