выполнить код только один раз в цикле loop ардуино

Как выполнить код только 1 раз в цикле loop?

Всем привет. Решил переделать автоматический освежитель воздуха. Идея такова, что после выключения света в туалете освежитель пшикает один раз и переходит в режим ожидания до следующего включения и выключения света. Для этого в схеме использовал фоторезистор и реле (потом заменю на транзистор), которое приводит в движение привод.

Так вот, я хочу, чтобы после выключения света, реле срабатывало только 1 раз (1 пшик), а затем переходило в режим ожидания.

Написал такой простенький код, однако после выключения света код в цикле loop не останавливается, реле, то включается, то выключается. Подскажите, пожалуйста, как реализовать эту затею? Спасибо!

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как выполнить код только 1 раз?
всем привет, передо мной стоит такая задача: есть некий общий скрипт, состоящий из отдельных.

Как выполнить код только один раз (при запуске программы?)
Как известно, At module level, you can use only comments and declarative statements. Значит, весь.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.Как в цикле можно выполнить действие один раз?
Есть цикл, который выполняется n раз. Но 1 действие в этом цикле необходимо выполнить только 1.

Решение

Спасибо большое! Все работает практически как надо. Вот только иногда случаются ложные срабатывания, все дело в отсутствии гистерезиса. Я думал, что проще всего в код, приведенный выше, добавить опрос фоторезистора не постоянно, а с задержкой, например, раз в 5 секунд. Delay не подходит, так как начинает тормозить другой код программы.

В интернете похожей реализации нигде не нашел (((

Решение

Решение

NeXan87,
а что у вас за привод?
он бы тоже мог смывать от фоторезистора при времени меньше 3 минут))

Я в домашних условиях тоже обычно сажусь, так как я не снайпер))) Вообще, вот полный код пшикалки, вдруг кто захочет повторить)

Во время распыления (0,8 сек) включится зеленый светодиод и сменится мигающим красным, это блокировка повторного нажатия в течение 30 минут (запах освежителя обычно столько и держится). Также блокируется и кнопка ручного распыления.

В ручном режиме работает только кнопка. При этом во время ключенного света синий светодиод готовности постоянно мигает (таймер жеж выключен). При нажатии на кнопку, происходят описанные выше действия.

Для увеличения срока службы батареек, светодиод полностью отключается в тот момент, когда в туалете темно.

Также присутствует защита от переразряда батареек (2 Ni-Mh последовательно). Если заряд опустится ниже 1,9В, то работа распылителя будет заблокирована полностью и включится красный светодиод, а Ардуино уйдет в сон для уменьшения энергопотребления.

Источник

Циклы

Цикл for

Объединим три предыдущих пункта в пример:

Именно при помощи цикла for очень часто работают с массивами. Можно, например, сложить все элементы массива для поиска среднего арифметического:

Что касается особенностей использования for в языке C++: любая его настройка является необязательной, то есть её можно не указывать для каких-то особенных алгоритмов. Например вы не хотите создавать переменную цикла, а использовать для этого другую имеющуюся переменную. Пожалуйста! Но не забывайте, что разделители настроек (точка с запятой) обязательно должны присутствовать на своих местах, даже если настроек нет!

Также в цикле может вообще не быть настроек, и такой цикл можно считать вечным, замкнутым:

Цикл “for each” (New)

В свежих версиях компилятора появилась поддержка аналога цикла foreach, который есть в некоторых других языках программирования. Реализация позволяет сократить код для прохода по любому массиву данных. Рассмотрим типичный пример вывода массива чисел в порт, как в уроке про массивы:

В нашем примере вывода это будет выглядеть так:

val в этом случае предоставляет полный доступ к элементу массива, то есть можно его читать/писать. Пример выше выведет значение каждого элемента, а затем обнулит его. После выполнения цикла весь массив будет забит нулями. Отсутствие индексации в цикле может быть неудобным для некоторых алгоритмов, но счётчик всегда можно добавить свой. Например забьём массив числами от 0 до 90 с шагом 10:

Оператор break

Оператор break (англ. “ломать”) позволяет досрочно покинуть цикл, использовать его можно как по условию, так и как-угодно-удобно. Например давайте досрочно выйдем из цикла при достижении какого-то значения:

Или вот такой абстрактный пример, покинем “вечный” цикл при нажатии на кнопку:

Выход из цикла является не единственным интересным инструментом, ещё есть оператор пропуска – continue

Оператор continue

Оператор continue (англ. “продолжить”) досрочно завершает текущую итерацию цикла и переходит к следующей. Например давайте заполним массив, как делали выше, но пропустим один элемент:

Таким образом элемент под номером 10 не получит значения 25, итерация завершится до операции присваивания.

Цикл while

Цикл while тоже удобно использовать как вечный цикл, например, ожидая наступление какого-либо события (нажатие кнопки):

Пока условие не произойдёт, код не пойдёт дальше, застрянет на этом цикле. Как вы уже поняли, оператор if тут не нужен, нужно указывать именно логическое значение, можно даже вот так:

Цикл do while

do while – “делать пока”, работа этого цикла полностью аналогична циклу while за тем исключением, что здесь условие задаётся после цикла, т.е. цикл выполнится один раз, затем проверит условие, а не наоборот. Пример:

Где применять? Да где угодно, по ходу написания собственных программ вы почувствуете, где удобнее использовать тот или иной цикл.

Видео

Источник

Arduino.ru

Как выполнить код только 1 раз в цикле loop?

Ух как тема разрослась)) Мне подсказали на другом форуме, что для добавления гистерезиса нужно всего лишь добавить простую строку (как ж я не смог догадаться!!),

Это вам ещё в #54 подсказали, если что.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

пятерка лишняя, и это потри

Простите, Ардуино начал изучать только неделю назад. Вот дописал код с millis для блокировки повторного срабатывания пшика в течение 5 мин, однако Ардуино этого времени не дожидается и начинает пшикать сразу после повторного включения и выключения света. Вот пример кода, подскажите, что здесь не так?

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

в строке 17 или 18 надо учесть led1On.

Можно и в 27 (не взводим флаг пока не истек интервал). led1On в этом случае лишний

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

или так, красиво но не понятно для ТС )

Нет, чтоб участок кода дописать, лентяи)) Я уж сам догадался.

Нет, чтоб участок кода дописать

фии. так неинтересно (

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

да и гестерезис особо не нужен

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

да и гестерезис особо не нужен

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

пшикать надо в темноте, а не в лицо.

и не пшикать если зашли менее чем через 10 мин.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

пшикать надо в темноте, а не в лицо.

и не пшикать если зашли менее чем через 10 мин.

а задержка есть. хотя надо дополнить строку 23 и выставить нужные временные интервалы

да и гестерезис особо не нужен

Я как понимаю, строка

if(raw == 5 || raw == 600 )

отвечает за то, если свет включится на 5 секунд, то после выключения пшикнуть?

Если нет, то хотелось бы еще функцию срабатывания пшика по таймеру. То есть, в среднем на посрать времени тратится около 5 минут, обоссать унитаз около минуты. Если свет был включен до 3 минут, не пшикать. Так вот, этот код, что выше сможет ли реализовать задуманное?)))

да и гестерезис особо не нужен

Я как понимаю, строка

отвечает за то, если свет включится на 5 секунд, то после выключения пшикнуть?

Если нет, то хотелось бы еще функцию срабатывания пшика по таймеру. То есть, в среднем на посрать времени тратится около 5 минут, а по маленькому около минуты. Поэтому, если свет был включен до 3 минут, не пшикать. Так вот, этот код, что выше сможет ли реализовать задуманное или придется переписывать?)))

Millis, я как понимаю, не сбрасывает таймер, если он не дошел до заданного.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

да и гестерезис особо не нужен

Я как понимаю, строка

отвечает за то, если свет включится на 5 секунд, то после выключения пшикнуть?

Если нет, то хотелось бы еще функцию срабатывания пшика по таймеру. То есть, в среднем на посрать времени тратится около 5 минут, а по маленькому около минуты. Поэтому, если свет был включен до 3 минут, не пшикать. Так вот, этот код, что выше сможет ли реализовать задуманное или придется переписывать?)))

Millis, я как понимаю, не сбрасывает таймер, если он не дошел до заданного.

только не забудьте паузу в последней строке сделать больше самого большого повтора

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

Millis, я как понимаю, не сбрасывает таймер, если он не дошел до заданного.

Разобрался в принципе действия вашего кода, но мне нужно, чтобы пшик был сразу после выключения света, а не во время включенного. Дописал фунццию analogRead( photo ) Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

так логика работы в 28й строке у вас получилась противоречащая логике вышестоящего кода

а сейчас хотите сразу пшикать.

так чего вы хотите в итоге?

и да, с момента включения света до момента входа в туалет пройдет несколько секунд.

хотите наверняка и быстрее

и в строке 23 у вас уже будет не 5 секунд, а 0.5с (пол секунды)

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

вроде нигде не запутал ничего

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

Спасибо, нашел решение, вместо «raw++» написал «raw=1», все работает как и раньше, а также изменил:

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

Спасибо, нашел решение, вместо «raw++» написал «raw=1», все работает как и раньше, а также изменил:

вроде нигде не запутал ничего

Этот код сбрасывает флаг 3 автоматически на 0 при прошествии более 3 секунд и пшика после «выключения света» не происходит. Если это сделать до 3 секунд, то флаг 3 переходит на 4, потом 5 и 0.

Такая же фигня происходила и с прежним кодом. Если сразу после включения флага 1 выключить свет, то он перейдет к 2, 3, 0. Но если после включени флага 1 выключить свет, например, через 10 секунд, то он сразу переходит в 0. Целый день уже ябусь. Уже думаю оставить включение пшикалки со включенным светом(((

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

вы его точно скопировали? или прошлый подправлли под него?

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

вот с уменьшенным временем

Все тоже самое, сброс флага 3 через несколько секунд.

Увидим ли мы конец этой опупеи.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

Давайте вернемся к прежней версии кода))

Судя по монитору, таймер pMs2 запускается сразу после достижения 5 секунд pMs1 и останавливается сам по себе на значении 6037 (через пару секунд после запуска), даже с выпиленными последними тремя функциями. То есть loop заканчивается на запуске этого таймера. Может быть из-за этого и флаг Pshik обнуляется?

Просто хочется докопаться до причины, я не успокоюсь)) Без этого же намного усложняется обучение))

P.S. Кажется понял. надо вместо (raw == 5) поставить (raw >= 5). Все работает и таймер pMs2 не останавливается сам по себе, и пшик работает через любое время.

P.S.2. Но это пока не точно.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

а может потому, что вы неправильно расставили вывод в порт логи

давайте сюда код, который вы заливаете в своё устройство в полном виде

а может потому, что вы неправильно расставили вывод в порт логи

давайте сюда код, который вы заливаете в своё устройство в полном виде

Как я уже посал в том сообщении, дело было в ошибке функции (raw == 5), нужно поставить знак >=. Тогда таймер не останавливается.

Morroc, пока все работает) Интересует, до какого значения доходит таймер pMs2, он же должен потом сброситься? Не глюкнет ли ничего после сброса?

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

нет, если там будет >= то он будет при каждой итерации сбрасывать флаг на 1 и таймер

строка 28 замените на if( raw == 5 && Pshik == 0 )

вот же. да за это время я на двух (может трех) триггерах без МК уже собрал бы эту пшикалку. перечитайте пост 68 и напишите таблицу переходов. всех дел-то собрать 2 одновибратора по «и»

создайте кучу флагов:

свет выключили Y1 = 1

если все нужные флаги ==1, пшыкаем, скидываем и взводим нужные флаги.

вот же. да за это время я на двух (может трех) триггерах без МК уже собрал бы эту пшикалку. перечитайте пост 68 и напишите таблицу переходов. всех дел-то собрать 2 одновибратора по «и»

Не, Гриш, это не наш метод. Элита очень преподавать любит, в последний его серьезный заход, «Работа с кнопками. » от комментариев прикрыли.

Элита очень преподавать любит, в последний его серьезный заход, «

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

нет, если там будет >= то он будет при каждой итерации сбрасывать флаг на 1 и таймер

строка 28 замените на if( raw == 5 && Pshik == 0 )

Вообще не работает этот вариант. Таймер pMs2 останавливается наверно на 6 секунде и ничего не работает как мне кажется из-за того, что if ( raw == 5 ), а на 6 секунде уже не ровно 5. Но когда я поставил знак >= таймер pMs2 стал останавливаться после выключения света и продолжал отчет на 5 секунде после включения света.

Не знаю, что такое интерация, но пшик срабатывает снова и снова. Может должно пройти больше времени после того как начнутся глюки.

Неважно на какой секунде, но когда то 5 там будет и сразу должен запуститься «пшик», стрянно.

Для наглядности лучше вывести cMs и Pshik (и в if’ы после выполнения команд внутри тоже сунуть вывод)

Размещаю весь код моей пшикалки, который у меня получился. На данный момент все задуманное испытано и работает. Всем спасибо за помощь! Для новичка это очень хорошо, хоть и код получился корявым)))

Во время распыления (0,8 сек) включится зеленый светодиод и сменится мигающим красным, это блокировка повторного нажатия в течение 30 минут (запах освежителя обычно столько и держится). Также блокируется и кнопка ручного распыления.

В ручном режиме работает только кнопка. При этом во время ключенного света синий светодиод готовности постоянно мигает (таймер жеж выключен). При нажатии на кнопку, происходят описанные выше действия.

Для увеличения срока службы батареек, светодиод полностью отключается в тот момент, когда в туалете темно.

Также присутствует защита от переразряда батареек (2 Ni-Mh последовательно). Если заряд опустится ниже 1,9В, то работа распылителя будет заблокрована полностью и включится красный светодиод, а Ардуино уйдет в сон для уменьшения эноргопотребления.

Источник

Arduino.ru

Как выполнить код только 1 раз в цикле loop?

Ух как тема разрослась)) Мне подсказали на другом форуме, что для добавления гистерезиса нужно всего лишь добавить простую строку (как ж я не смог догадаться!!),

Это вам ещё в #54 подсказали, если что.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

пятерка лишняя, и это потри

Простите, Ардуино начал изучать только неделю назад. Вот дописал код с millis для блокировки повторного срабатывания пшика в течение 5 мин, однако Ардуино этого времени не дожидается и начинает пшикать сразу после повторного включения и выключения света. Вот пример кода, подскажите, что здесь не так?

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

в строке 17 или 18 надо учесть led1On.

Можно и в 27 (не взводим флаг пока не истек интервал). led1On в этом случае лишний

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

или так, красиво но не понятно для ТС )

Нет, чтоб участок кода дописать, лентяи)) Я уж сам догадался.

Нет, чтоб участок кода дописать

фии. так неинтересно (

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

да и гестерезис особо не нужен

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

да и гестерезис особо не нужен

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

пшикать надо в темноте, а не в лицо.

и не пшикать если зашли менее чем через 10 мин.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

пшикать надо в темноте, а не в лицо.

и не пшикать если зашли менее чем через 10 мин.

а задержка есть. хотя надо дополнить строку 23 и выставить нужные временные интервалы

да и гестерезис особо не нужен

Я как понимаю, строка

if(raw == 5 || raw == 600 )

отвечает за то, если свет включится на 5 секунд, то после выключения пшикнуть?

Если нет, то хотелось бы еще функцию срабатывания пшика по таймеру. То есть, в среднем на посрать времени тратится около 5 минут, обоссать унитаз около минуты. Если свет был включен до 3 минут, не пшикать. Так вот, этот код, что выше сможет ли реализовать задуманное?)))

да и гестерезис особо не нужен

Я как понимаю, строка

отвечает за то, если свет включится на 5 секунд, то после выключения пшикнуть?

Если нет, то хотелось бы еще функцию срабатывания пшика по таймеру. То есть, в среднем на посрать времени тратится около 5 минут, а по маленькому около минуты. Поэтому, если свет был включен до 3 минут, не пшикать. Так вот, этот код, что выше сможет ли реализовать задуманное или придется переписывать?)))

Millis, я как понимаю, не сбрасывает таймер, если он не дошел до заданного.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

да и гестерезис особо не нужен

Я как понимаю, строка

отвечает за то, если свет включится на 5 секунд, то после выключения пшикнуть?

Если нет, то хотелось бы еще функцию срабатывания пшика по таймеру. То есть, в среднем на посрать времени тратится около 5 минут, а по маленькому около минуты. Поэтому, если свет был включен до 3 минут, не пшикать. Так вот, этот код, что выше сможет ли реализовать задуманное или придется переписывать?)))

Millis, я как понимаю, не сбрасывает таймер, если он не дошел до заданного.

только не забудьте паузу в последней строке сделать больше самого большого повтора

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

Millis, я как понимаю, не сбрасывает таймер, если он не дошел до заданного.

Разобрался в принципе действия вашего кода, но мне нужно, чтобы пшик был сразу после выключения света, а не во время включенного. Дописал фунццию analogRead( photo ) Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

так логика работы в 28й строке у вас получилась противоречащая логике вышестоящего кода

а сейчас хотите сразу пшикать.

так чего вы хотите в итоге?

и да, с момента включения света до момента входа в туалет пройдет несколько секунд.

хотите наверняка и быстрее

и в строке 23 у вас уже будет не 5 секунд, а 0.5с (пол секунды)

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

вроде нигде не запутал ничего

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

Спасибо, нашел решение, вместо «raw++» написал «raw=1», все работает как и раньше, а также изменил:

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

Спасибо, нашел решение, вместо «raw++» написал «raw=1», все работает как и раньше, а также изменил:

вроде нигде не запутал ничего

Этот код сбрасывает флаг 3 автоматически на 0 при прошествии более 3 секунд и пшика после «выключения света» не происходит. Если это сделать до 3 секунд, то флаг 3 переходит на 4, потом 5 и 0.

Такая же фигня происходила и с прежним кодом. Если сразу после включения флага 1 выключить свет, то он перейдет к 2, 3, 0. Но если после включени флага 1 выключить свет, например, через 10 секунд, то он сразу переходит в 0. Целый день уже ябусь. Уже думаю оставить включение пшикалки со включенным светом(((

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

вы его точно скопировали? или прошлый подправлли под него?

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

вот с уменьшенным временем

Все тоже самое, сброс флага 3 через несколько секунд.

Увидим ли мы конец этой опупеи.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

Давайте вернемся к прежней версии кода))

Судя по монитору, таймер pMs2 запускается сразу после достижения 5 секунд pMs1 и останавливается сам по себе на значении 6037 (через пару секунд после запуска), даже с выпиленными последними тремя функциями. То есть loop заканчивается на запуске этого таймера. Может быть из-за этого и флаг Pshik обнуляется?

Просто хочется докопаться до причины, я не успокоюсь)) Без этого же намного усложняется обучение))

P.S. Кажется понял. надо вместо (raw == 5) поставить (raw >= 5). Все работает и таймер pMs2 не останавливается сам по себе, и пшик работает через любое время.

P.S.2. Но это пока не точно.

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

а может потому, что вы неправильно расставили вывод в порт логи

давайте сюда код, который вы заливаете в своё устройство в полном виде

а может потому, что вы неправильно расставили вывод в порт логи

давайте сюда код, который вы заливаете в своё устройство в полном виде

Как я уже посал в том сообщении, дело было в ошибке функции (raw == 5), нужно поставить знак >=. Тогда таймер не останавливается.

Morroc, пока все работает) Интересует, до какого значения доходит таймер pMs2, он же должен потом сброситься? Не глюкнет ли ничего после сброса?

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

нет, если там будет >= то он будет при каждой итерации сбрасывать флаг на 1 и таймер

строка 28 замените на if( raw == 5 && Pshik == 0 )

вот же. да за это время я на двух (может трех) триггерах без МК уже собрал бы эту пшикалку. перечитайте пост 68 и напишите таблицу переходов. всех дел-то собрать 2 одновибратора по «и»

создайте кучу флагов:

свет выключили Y1 = 1

если все нужные флаги ==1, пшыкаем, скидываем и взводим нужные флаги.

вот же. да за это время я на двух (может трех) триггерах без МК уже собрал бы эту пшикалку. перечитайте пост 68 и напишите таблицу переходов. всех дел-то собрать 2 одновибратора по «и»

Не, Гриш, это не наш метод. Элита очень преподавать любит, в последний его серьезный заход, «Работа с кнопками. » от комментариев прикрыли.

Элита очень преподавать любит, в последний его серьезный заход, «

выполнить код только один раз в цикле loop ардуино. картинка выполнить код только один раз в цикле loop ардуино. выполнить код только один раз в цикле loop ардуино фото. выполнить код только один раз в цикле loop ардуино видео. выполнить код только один раз в цикле loop ардуино смотреть картинку онлайн. смотреть картинку выполнить код только один раз в цикле loop ардуино.

нет, если там будет >= то он будет при каждой итерации сбрасывать флаг на 1 и таймер

строка 28 замените на if( raw == 5 && Pshik == 0 )

Вообще не работает этот вариант. Таймер pMs2 останавливается наверно на 6 секунде и ничего не работает как мне кажется из-за того, что if ( raw == 5 ), а на 6 секунде уже не ровно 5. Но когда я поставил знак >= таймер pMs2 стал останавливаться после выключения света и продолжал отчет на 5 секунде после включения света.

Не знаю, что такое интерация, но пшик срабатывает снова и снова. Может должно пройти больше времени после того как начнутся глюки.

Неважно на какой секунде, но когда то 5 там будет и сразу должен запуститься «пшик», стрянно.

Для наглядности лучше вывести cMs и Pshik (и в if’ы после выполнения команд внутри тоже сунуть вывод)

Размещаю весь код моей пшикалки, который у меня получился. На данный момент все задуманное испытано и работает. Всем спасибо за помощь! Для новичка это очень хорошо, хоть и код получился корявым)))

Во время распыления (0,8 сек) включится зеленый светодиод и сменится мигающим красным, это блокировка повторного нажатия в течение 30 минут (запах освежителя обычно столько и держится). Также блокируется и кнопка ручного распыления.

В ручном режиме работает только кнопка. При этом во время ключенного света синий светодиод готовности постоянно мигает (таймер жеж выключен). При нажатии на кнопку, происходят описанные выше действия.

Для увеличения срока службы батареек, светодиод полностью отключается в тот момент, когда в туалете темно.

Также присутствует защита от переразряда батареек (2 Ni-Mh последовательно). Если заряд опустится ниже 1,9В, то работа распылителя будет заблокрована полностью и включится красный светодиод, а Ардуино уйдет в сон для уменьшения эноргопотребления.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *