Плавное мигание светодиода
- Войдите на сайт для отправки комментариев
Сб, 08/05/2021 - 19:07
Здравствуйте! Имею светодиод, ардуину и пульт ДУ, мне нужно чтобы от нажатия первой кнопки на пульте начинал плавно мигать светодиод, а после нажатия второй кнопки это действие прекращалось. Чтобы светодиод включался и мигал после нажатия кнопки - я сделал, но как не смешно бы это звучало, я не знаю как остановить мигание. Я пытался на вторую кнопку просто поставить analogWrite(9, LOW), но это не сработало. Подскажите, пожалуйста, как мне обыграть эту ситуацию.
Попробуйте нажать в момент полного затухания светодиода. Если повезет - сработает, не повезет - уйдет на новый круг. Потому что ваши циклы на увеличение/уменьшение яркости полностью блокируют работу МК, до опроса приемника дело не доходит ))
clem - забыли дать irrecv.resume() после приема первой команды
Спасибо за советы. Если нажать во время затухания - ноль реакции, много комбинаций команд попробовал, но ничего не получается... Существуют ли ещё какие-нибудь способы выключить мигание светодиода или на этом возможности ардуины заканчиваются?))
Заканчиваются. Если у человека мозгов не хватает, то ардуине-то куда.
Существуют ли ещё какие-нибудь способы выключить мигание светодиода или на этом возможности ардуины заканчиваются?))
Ардуина - это тупой набор транзисторов. И умеет этот набор транзисторов ровно то, что в него вложил программист. В вашем случае светодиод мигает ровно так, как вы запрограммировали. То, что вы хотели другого, говорит не о возможностях ардуины, а о ваших возможностях, как программиста. Можно ли сделать так, как вы хотите? Можно. Но, боюсь, вы на текущем уровне с этим не справитесь )
имхо, тут все не так страшно. В коде нет бесконечных циклов, Если почистить данные, пришедшие с пульта - программа отработает одно мигание и заткется. Вот для этого и нужна функция resume()
Так в том и дело, я не говорю, что я великий программист, я новичёк, на сколько это только возможно, вот и спрашиваю у Вас, как мне можно подкорректировать эту программу. Многие напишут, мол иди учись, но я не вижу смысла в этом, потому что тратить время на обучение тому, чем я не буду пользоваться, ну или раз за год написать какой-нибудь пустяшный скетч, для бытовухи - не вижу смысла. Ну в принципе достаточно лирики, спасибо за ответы, в любом случае, буду дальше думать и искать...
Если ставить resume - то да, он один раз мигнёт и можно дальше использовать другие команды, но мне нужно чтобы светодиод мигал, мигал, мигал какое-то неопределённое количество времени, а потом, как только я захочу выключить это мигание, в любой момент времени.
Посмотрите http://arduino.ru/tutorials/BlinkWithoutDelay
1. Переделать в BlinkWithoutFor.
2. В
switch
только выставлять флаг, а дальше по if-у первый пункт.Если бы ты дал себе труд почитать форум, то узнал бы, что именно такие высказывания вызывают много негатива. Это хоббийный форум, не нуждающийся в новых "кликах" ;)). Тут нет рекламы, как можно заметить. Следовательно просто ради "кармы" никто советы давать не станет, а высказыванием "не вижу смысла учиться", ты вызываешь ответ "не вижу смысла помогать".
Мы специально для таких пассажиров завели коммерческий раздел форума. Если ты не наш коллега по хобби, то помогать тебе бесплатно ни у кого нет мотивации - вот и найди желающего дать тебе совет "за пиво". В разделе "Ищу исполнителя".
тогда "давай до свиданья"
Может под не хочу учиться clem имел ввиду обучение на курсах или ВО по программированию?
Я у себя набросал код, который должен у ТС заработать, но ему же самому не интересно будет готовый код получить. Хотя и мой код не проверенный до конца у меня ИК приёмника нет.
Я бы сделал так:
Но если в вашем коде заменит в строке 31 analogWrite() на digitalWrite(9, LOW) может начнет выключаться
Alexey_Rem
ТС-у нужно, чтобы постоянно моргал, пока вторая кнопка не будет нажата.
blnk в строках 12 и 26 всегда будут true.
Может под не хочу учиться clem имел ввиду обучение на курсах или ВО по программированию?
Я у себя набросал код, который должен у ТС заработать, но ему же самому не интересно будет готовый код получить. Хотя и мой код не проверенный до конца у меня ИК приёмника нет.
Да, Андрей правильно подметил. Извиняюсь, не так выразился. Посыл мой был в том, что я не вижу смысла учится этому за деньги и большое количество времени, потому что я не буду тупо пользоваться этими знаниями. Согласен с вышенаписанными сообщениями, но я не прошу написать мне скетч полностью, за какую-то сумму денег... Хоть я новичок прям нулёвый, но я в инете нашёл вот этот самый главный элемент программы, которая работает так, как мне и нужно, но проблема в том, что мне нужно прям чуть-ли одной строчки кода))) как мне кажется, потому что я не думал, что, чтобы отменить уже запушенную команду, нужно еще 150 строчек написать)) Ещё раз, извиняюсь, что задел чувства программистов.
clem
Добавлением одной строчки это как b707 предложил. Ну да будет гаснуть после одного моргания.
Ещё вариант пусть моргает пока кнопка нажата, но как я понял там может быть другой пересылаемый код от пульта, надо проверять, что он там будет слать от постоянно зажатой кнопки. То же, вроде, проще будет сделать.
я не думал, что, чтобы отменить уже запушенную команду, нужно еще 150 строчек написать))
вы можете не верить. но в данном случае это так - чтобы добавить в ваш код отмену мигания по кнопке - этот код надо переписать ПОЛНОСТЬЮ
я не думал, что, чтобы отменить уже запушенную команду, нужно еще 150 строчек написать))
вы можете не верить. но в данном случае это так - чтобы добавить в ваш код отмену мигания по кнопке - этот код надо переписать ПОЛНОСТЬЮ
:(
Вполне возможно, не проверял
clem
Добавлением одной строчки это как b707 предложил. Ну да будет гаснуть после одного моргания.
Ещё вариант пусть моргает пока кнопка нажата, но как я понял там может быть другой пересылаемый код от пульта, надо проверять, что он там будет слать от постоянно зажатой кнопки. То же, вроде, проще будет сделать.
Да, я так делал, чтобы от зажатой кнопки мигало, но мне в дальнейшем надо будет добавлять ещё одно мигание на другую кнопку, и выключать его соответственно.
Я бы сделал так:
Но если в вашем коде заменит в строке 31 analogWrite() на digitalWrite(9, LOW) может начнет выключаться
Сейчас подключил, попробовал, к сожалению, ноль реакции...
И digitalWrite пробовал и analogWrite
Завтра попробую сделать по аналогии с кнопкой, как-будто переключение режимов будет, делал я одну вещицу, в ней было много режимов и они переключались, и было без разницы мигают там светодиоды или просто светятся...
Я, к сожалению, проверить не могу я предложил свое видение проблемы, добавлю только что где-то на этом форуме писали что делей в лупе совсем не айс.
Еще
Еще
Вы спросили сами у себя?
Во, интересно, а по аппаратному прерыванию можно ИК сигнал принять. Блин, у меня ИК приёмника нет. :(
И у себя и у вопрошающего (по секрету: не хватает break;)
В моём коде вот так, ну минус пару строк внутри второго case. :)
break
; там не было.
Я, к сожалению, проверить не могу я предложил свое видение проблемы, добавлю только что где-то на этом форуме писали что делей в лупе совсем не айс.
Можете проверить свой код, заменив ИК приёмник обычной кнопкой.
Мне, если честно облом, думаю что код вполне рабочий если куда надо вставить break;. чем он лучше кода вопрошающего? особо ничем кpоме некоторой оптимизации мигания и изьятия делея из лупа-не знаю правда ли но где-то здесь писали что это не хорошо когда делей в лупе, вообще считаю делей злом даже когда первый раз мигал диодом обошелся без делея,
Делей может быть и в свободной функции
Вызов функции будет произведён прямо или косвенно из setup или loop. Т.е. во время выполнения отработает delay не расположенный непосредственно в loop. Не?
В loop'е delay нет, а он есть.
Совершенно верно
Вызов функции будет произведён прямо или косвенно из setup или loop. Т.е. во время выполнения отработает delay не расположенный непосредственно в loop. Не?
Не обязательно. Кто-нибудь одаренный может сунуть дилэй в конструктор
Завтра попробую сделать по аналогии с кнопкой, как-будто переключение режимов будет, делал я одну вещицу, в ней было много режимов и они переключались, и было без разницы мигают там светодиоды или просто светятся...
Интересно, что получилось.
В общем только сегодня руки дошли до ардуины. Попробовал много всяких вариантов, и delay убрал из loop, и вообще убрал delay, заменив на millis, и добавлял break, не хочет выключаться... У меня в одном скетче есть переключение режимов кнопкой, там все режимы идут один за другим, я попытался его изменить под пульт, но даже на вид получается заведомо не рабочая фигня, а главное нужно изменить так, чтобы режимы включались свободно и отдельно друг от друга. В общем, я в замешательстве...
Сейчас имею вот такой нерабочий скетч)
А во второй case по нажатию второй кнопки входит? Можно какую-нибудь метку в монитор порта там попробовать вывести, между строками 24 и 25.
Сейчас имею вот такой нерабочий скетч)
нет уже сил смотреть на этот тупизм. Нате, пользуйтесь, добавил всего пару строк.
А после switch не должно разве быть
irrecv.resume();
?И т.к. режимов несколько, то вместо флага нужно будет использовать переменную для хранения режимов моргания.
А после switch не должно разве быть
irrecv.resume();
?И т.к. режимов несколько, то вместо флага нужно будет использовать переменную для хранения режимов моргания.
с первым замечанием, наверно, соглашусь, со вторым нет. Я правил скетч. в котором один режим. Если ТС захочет добавить другие режимы - это уже его дело.
clem
Попробуйте вот этот код в loop вставить вместо своего. Должен просто включать и выключать светодиод.
Сейчас имею вот такой нерабочий скетч)
нет уже сил смотреть на этот тупизм. Нате, пользуйтесь, добавил всего пару строк.
Тупизм тупизмом, но Ваша программа тоже не работает... Вот что происходит в мониторе порта каждое мгновение в вашей программе:
clem
Попробуйте вот этот код в loop вставить вместо своего. Должен просто включать и выключать светодиод.
Да, если просто включать и выключать светодиод, то всё работает как нужно, с этим проблем нет.
Кстати, я тут заметил, что такая фигня с бесконечным количеством нажатий, будет если нажать вообще любую кнопку, что странно...
Даже со строчкой 10 из моего последнего кода?
Тупизм тупизмом, но Ваша программа тоже не работает... Вот что происходит в мониторе порта каждое мгновение в вашей программе:
покажите мне в моей программе хоть какой-то вывод в монитор - там такого нет. Отсюда вывод - это не моя программа, вы ее изменили. Тогда выкладывайте полный код, иначе вы просто врете.