Нужна помощь новичку в написании цикла (Сушильная камера)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Доброго времени суток, уважаемые. Написал программу управления сушильной камеры. Протестировал, все отлично работает, но хочу ее усовершенствовать, для более ефективной работы. Имеется нагревательный елемент и вытяжной вентилятор. В программе присутствуют значения максимальной/минимальной температуры и влажности, по которым сейчас все работает. Но, управление вытяжкой, по наблюдениям, хотелось бы переписать в следующей логике: если влажность превышает установленное максимальное значение, включается вытяжка, и работает до тех пор, пока значение влажности не снизится на 10%. После этого вытяжка выключается и ожидает подъема влажности на 5%, снова включается и работает до снижения на 10% от предыдущего значения, и таким "ступенчастым" снижением до установленного минимального значения.
К примеру, если максимальное значение MaxHum = 100, то математически работа выглядит следующим образом:
H1 = MaxHum = 100 - на выходе логическиая 1
H2 = (H1 - 10) = 90 - на выходе логический 0
H3 = (H2 + 5) = 95 - на выходе логическая 1
H4 = (H3 - 10) = 85 - на выходе логический 0
H5 = (H4 + 5) = 90 - на выходе логическая 1 и так далее
Сижу голову ломаю, как это написать более компактно, и в случае необходимости изменения значений не переписывать во всех строках. Подскажите, каким образом лучше реализовать такую логику. Спасибо
если влажность превышает установленное максимальное значение, включается вытяжка, и работает до тех пор, пока значение влажности не снизится на 10%. После этого вытяжка выключается и ожидает подъема влажности на 5%, снова включается и работает до снижения на 10% от предыдущего значения, и таким "ступенчастым" снижением до установленного минимального значения.
У Вас алгоритм прекрасно описан, введите флаг что идет осушение или пауза. По окончанию паузы меняете флаг и так в цикле, пока не достигнете требуемой влажности. Если не хотите переписывать всю программу, то введите дополнительные переменные вместо 10 и 5. Хотя программа будет небольшая и менять эти значения не составит труда.
А еще лучше выложите свой код, тогда будет что обсуждать и советовать.
Написал программу
Где она?
Вставка программного кода в тему/комментарий
Можно было и в первом посте поправить, да и код более 30-50 строк принято сворачивать, в опциях посмотрите
Ну, вот прямо так как рассказываете и пишите, кто ж Вам не даёт?
Здесь нет обработки конечного значение, т.к. Вы его не очень чётко прописали и я его не понял, но вставите сами.
Ну, Вы сделали как я сказал? Получилось?
Еще не пробовал заливать, устройство в другом месте. Расписал логику на листе бумаги, потом перевел на понятный ардуине язык, максимально упростил, иполучилось так. Ну вроде как должно работать. При таком коде первое включение происходит по достижению значения maxHum. В первом ЕСЛИ переменной currentHum не существует (в начале кода ей не присвоено никакого значения) , флаг, вроде как и не нужен, булеан изначально false, на всякий поставил. Только "currentHum = h1" вконце добавить для обновления переменной, ну и сами значения 5, 10 прописать как переменные, для удобства. Цикл так должен работать по двум параметрам: постоянно обновляемой currentHum и флагом CurrentState. Или я что-то упустил.... Компиляция ошибок не выдает.
if (h1 < maxHum && CurrentState == false)
{digitalWrite (FAN, HIGH);
CurrentState = CurrentState;}
При включении всей системы, уровень влажности всегда ниже максимальной, тоесть это условие соблюдается вначале, следовательно вытяжка выключена, CurrentState остается false. Но при этом вытяжка включается по достижению maxHum и выключается при значениях ниже maxHum, больше никаких действий не происходит.
Возможно "CurrentState != CurrentState" заменить на "CurrentState == false/true"?
Ну, я же Вам написал как надо делать, причём тут Ваш "код выше"? Сделайте как я написал и покажите код, если что не так. Только целиком - не огрызки.