4 / 4 / 0
Регистрация: 05.01.2015
Сообщений: 33
|
||||||
1 | ||||||
Как выполнить код только 1 раз в цикле loop?03.06.2019, 11:44. Показов 31676. Ответов 12
Всем привет. Решил переделать автоматический освежитель воздуха. Идея такова, что после выключения света в туалете освежитель пшикает один раз и переходит в режим ожидания до следующего включения и выключения света. Для этого в схеме использовал фоторезистор и реле (потом заменю на транзистор), которое приводит в движение привод.
Так вот, я хочу, чтобы после выключения света, реле срабатывало только 1 раз (1 пшик), а затем переходило в режим ожидания. Написал такой простенький код, однако после выключения света код в цикле loop не останавливается, реле, то включается, то выключается. Подскажите, пожалуйста, как реализовать эту затею? Спасибо!
0
|
03.06.2019, 11:44 | |
Ответы с готовыми решениями:
12
Как выполнить код только 1 раз? Как выполнить код только 1 раз и дальше ожидал Как выполнить цикл loop определенное кол-во раз ? Как выполнить код только один раз (при запуске программы?) |
364 / 347 / 74
Регистрация: 18.03.2015
Сообщений: 1,292
|
||||||
03.06.2019, 12:05 | 2 | |||||
Сообщение было отмечено NeXan87 как решение
Решение
3
|
4 / 4 / 0
Регистрация: 05.01.2015
Сообщений: 33
|
|
04.06.2019, 20:46 [ТС] | 3 |
Спасибо большое! Все работает практически как надо. Вот только иногда случаются ложные срабатывания, все дело в отсутствии гистерезиса. Я думал, что проще всего в код, приведенный выше, добавить опрос фоторезистора не постоянно, а с задержкой, например, раз в 5 секунд. Delay не подходит, так как начинает тормозить другой код программы.
В интернете похожей реализации нигде не нашел (((
0
|
364 / 347 / 74
Регистрация: 18.03.2015
Сообщений: 1,292
|
||||||||||||||||
05.06.2019, 09:56 | 4 | |||||||||||||||
Сообщение было отмечено NeXan87 как решение
Решение
Для гистерезиса
строка 13
2
|
4 / 4 / 0
Регистрация: 05.01.2015
Сообщений: 33
|
|
06.06.2019, 22:28 [ТС] | 5 |
Сергей 190 , огромное спасибо! Все работает! Остался последний и значимый штрих
Хотелось бы еще функцию срабатывания пшика по таймеру. То есть, в среднем на по-большому времени тратится около 5 минут, а по-маленькому около минуты. Поэтому, если свет был включен до 3 минут, не пшикать. Millis (), я как понимаю, не сбрасывает таймер, если он не дошел до заданного.
0
|
364 / 347 / 74
Регистрация: 18.03.2015
Сообщений: 1,292
|
||||||
08.06.2019, 13:18 | 6 | |||||
Сообщение было отмечено NeXan87 как решение
Решение
2
|
435 / 101 / 15
Регистрация: 21.02.2015
Сообщений: 845
|
|
13.06.2019, 11:13 | 7 |
NeXan87,
а как же две кнопки смыва, это ли не сигнал о двух вариантах?
0
|
4 / 4 / 0
Регистрация: 05.01.2015
Сообщений: 33
|
|
13.06.2019, 11:20 [ТС] | 8 |
Valakin, вы мне предлагаете установить концевик в бачке?)))
0
|
435 / 101 / 15
Регистрация: 21.02.2015
Сообщений: 845
|
|
13.06.2019, 11:36 | 9 |
NeXan87,
а что у вас за привод? он бы тоже мог смывать от фоторезистора при времени меньше 3 минут)) на уровне выше сидящего человека можно поставить дальномер. Он определяет садился ли человек, если нет - смывает по маленькому)) мужики скажут спасибо)
0
|
4 / 4 / 0
Регистрация: 05.01.2015
Сообщений: 33
|
||||||
13.06.2019, 11:58 [ТС] | 10 | |||||
Я в домашних условиях тоже обычно сажусь, так как я не снайпер))) Вообще, вот полный код пшикалки, вдруг кто захочет повторить)
Принцип действия таков. На корпусе есть переключатель - OFF > MANUAL (только кнопка) > AUTO / MANUAL (кнопка и автоматика). В последнем режиме после включения света в туалете, запускается таймер готовности пшика (3 мин), до этого времени мигает синий светодиод (стоит RGB). Если прошло менее 3 минут и свет отключился (это время обычно затрачивается на коричневые дела), то после повторного включения он начинает идти заново. Но если прошло 3 минуты синий светодиод начинает гореть постоянно, это означает, что после выключения света произойдет распыление освежителя. Таймер можно сбросить нажатием кнопки, если пшикать не требуется, он остановится и запустится только после вык/вкл света. Во время распыления (0,8 сек) включится зеленый светодиод и сменится мигающим красным, это блокировка повторного нажатия в течение 30 минут (запах освежителя обычно столько и держится). Также блокируется и кнопка ручного распыления. В ручном режиме работает только кнопка. При этом во время ключенного света синий светодиод готовности постоянно мигает (таймер жеж выключен). При нажатии на кнопку, происходят описанные выше действия. Для увеличения срока службы батареек, светодиод полностью отключается в тот момент, когда в туалете темно. Также присутствует защита от переразряда батареек (2 Ni-Mh последовательно). Если заряд опустится ниже 1,9В, то работа распылителя будет заблокирована полностью и включится красный светодиод, а Ардуино уйдет в сон для уменьшения энергопотребления. Для понижения энергопотребления я понизил частоту до 64 кГц (в 256 раз), пришлось пересчитывать таймеры. А Ардуино запитал через повышающий DC-DC, так как максимальное напряжение батареек не хватает для нормальной работы. На выходе выставил 3.3 Вольт. Чем выше, тем больше ток потребления. При 5В - 40 мА (16Мгц), при 3.3В - 1.7 мА (64 кГц) в режиме ожидания.
2
|
0 / 0 / 0
Регистрация: 15.02.2020
Сообщений: 3
|
|
16.02.2020, 12:56 | 11 |
Здравствуйте! Спасибо за огромную проделанную работу. Помогите пожалуйста со схемой. Не могу понять"что и куда". Благодарю
0
|
0 / 0 / 0
Регистрация: 15.02.2020
Сообщений: 3
|
|
18.02.2020, 07:44 | 13 |
NeXan87, Денис, здравствуйте. Помогите, пожалуйста, со схемой. Не могу разобраться. Спасибо большое
0
|
18.02.2020, 07:44 | |
18.02.2020, 07:44 | |
Помогаю со студенческими работами здесь
13
Как в цикле можно выполнить действие один раз? Как в цикле выполнить определенное действие один раз? Как сделать что бы код работал каждый раз а не только один раз Как в цикле выводить каждый раз только одну строку файла? Выполнить цикл замедления только один раз, как? Как только один раз выполнить функцию в данном проекте? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |