Логика работы насоса на двух герконовых датчиках
- Войдите на сайт для отправки комментариев
Пт, 27/04/2018 - 12:58
Приветствую профессионалов.
Весенняя проблема - осушить яму в гараже. Два геркона и поплавок с магнитом. Нормальное состояние с герконов = 1. При магнитном поле = 0. Запутался в логике включения/отключения насоса. Подскажите по коду или направьте где подсмотреть.
const int Relay = 13;// насос откачки const int buttonPin1 = 2;//геркон выключения (нижний) насоса откачки const int buttonPin2 = 3;//геркон включения (верхний) насоса откачки bool releState = false; // состояние реле когда включено bool upDown; void setup() { Serial.begin(9600); pinMode(Relay, OUTPUT); pinMode(buttonPin1, INPUT_PULLUP); pinMode(buttonPin2, INPUT_PULLUP); } void loop() { bool gerk1=digitalRead(buttonPin1); //считываем контакт нижнего геркона, без магнита = 1 bool gerk2=digitalRead(buttonPin2); //считываем контакт верхнего геркона, без магнита = 1 // принимаем решение что нужно делать //если нижний геркон = 0 магнит рядом, отключаем насос и запоминаем что идет наполнение if (gerk1==false) { if (gerk1!=upDown) { //запутался с выставлением ...флага направления помогите с логикой... } releState = false; upDown = true; //идет наполнение } else { releState = true; upDown = false; //идет выкачка } Serial.print("\tgerk1="); Serial.print(gerk1); Serial.print("\tgerk2="); Serial.print(gerk2); Serial.print("\tupDown="); Serial.print(upDown); Serial.print("\trelay="); Serial.println(releState); delay(700); }
А сделать то чего хотели?
Осушать яму.
Включать насос по верхнему геркону, запоминать включение до срабатывания нижнего геркона - выключать
Выключать насос по нижнему геркону, запоминать выключение. до срабатывания верхнего геркона - включать
Так тут и ардуина не нужна - одно реле , два геркона и все
Да, причем тут яма? Вы пишете, что хотели какие-то флаги куда-то выставлять. Так чего именно хотели то?
Да, причем тут яма? Вы пишете, что хотели какие-то флаги куда-то выставлять. Так чего именно хотели то?
Включать насос по верхнему геркону=0, запоминать включение(флаг=работает откачка) до срабатывания нижнего геркона - выключать
Выключать насос по нижнему геркону=0, запоминать выключение(флаг=накапливается вода) до срабатывания верхнего геркона - включать
Как написать логику if else if ....?
Пока расписывал что надо - написал сам. Правильно?
Я не понимаю проблему. Почему вот прямо так, как Вы и говорите и написать безо всяких сложностев? Тут что-то не так?
И собственно всё. Специально запоминать включено или нет нафиг не надо. В любой момент можно прямо спросить digitalRead(Relay); и узнать включено или нет.
Пока расписывал что надо - написал сам. Правильно?
не знаю, я не до конца понимаю задачу и потому не могу понять зачем такие сложности в которых потом чёрт ногу сломит. Как я себе это вижу, я Вам написал в прошлом посте. Там писать нечего. Если я чего-то недопонял и не учёл, ... ну, не знаю даже.
Попробуйте так
Спасибо за участие! Работает.
Иногда, по весне :), на тривиальной логике стопоришься......
А если будете через писать через цифровой автомат, то и тривилальной логики не надо. Все решается автоматом.
А может там вообще ардуина не нужна...
А может там вообще ардуина не нужна...
без дуино жисть теряет смысл.
я видел в старом журнале Радио такую же схему насоса на трех реле.