Millis не могу осилить.
- Войдите на сайт для отправки комментариев
Пнд, 08/03/2021 - 01:11
Всем сдрасти.
Пытаюсь уже второй день заставить диод на 13й ноге мигать с функцией милис так чтобы он например одну секунду был выключен, а 100 миллисекунд горел.
Это должно повторяться постоянно. В идеале диод должен начать моргать не сразу, а скажем через две секунды после включения Ардуино.
Подскажите пожалуйста где можно найти пример.
С шимом разобрался, а вот с пульсацией только delay могу.
Раньше с микроконтроллерами не занимался, только в детстве в начале 90х на радио кружок ходил.
Для начала вставьте код по правилам форума.
Много чего в коде менял, но так как хочется не работает.
Пробовал по нескольким видео с Ютуба.
Купил набор для таких как я, но он ещё не пришёл. Руки чешутся.
Подозреваю, что Вы пытаетесь решить задачу методом тыка. Но лучше как-то систематизировать, например, описать словами алгоритм, т.е. что вы хотите от программы по шагам, а потом записать это в виде кода.
Вы же понимаете, что делает приведённый Вами код? И какая переменная "отвечает" за время горения светодиода? Вот её и надо менять.
Нет я не понимаю.
Ну тогда Вам нужно сначала понять, как работает приведённый вами код, что он делает, а потом двигаться дальше. Для этого Вам нужно что-нибудь почитать по программированию. Да, скучно, но в дальнейшем всё равно понадобится.
Вы наверное не читали мое первое сообщение.
Прочтите ещё раз.
Если вам нескем поговорить то купите попугайчиков.
А тут можете идти лесом.
Удачи вам и в ваших начинаниях.
Ваша задача специфическая, а значит - откуда взяться примеру?
Любые специфические задачи или сами решаете или заказывайте в платном разделе. Но я так понял, что Вам самому разбираться желания нет...
вот и дальше не занимайся. купи папугайчиков.
Вам же нужны разные интервалы, а вы уперлись в один и тот же для обеих фаз. Нужно изменять интервал в зависимости от состояниям светодиода. Добавьте перед 23 строкой
и получите то, что хотите
Вам же нужны разные интервалы, а вы уперлись в один и тот же для обеих фаз. Нужно изменять интервал в зависимости от состояниям светодиода. Добавьте перед 23 строкой
и получите то, что хотите
IMHO хамство должно пресекаться, а не поощряться.
почитав немного форум, прихожу к выводу что тут в основном посылают книшки пачитать, вот ТС и психанул, это же раздел для новичков, чё вы такие злые
вот ТС и психанул, это же раздел для новичков, чё вы такие злые
1. Если некто "психанул" - это не повод "обнять и плакать", а повод пойти к доктору.
2. Это раздел для новичков, но не для лиц с "особенностями развития". Для "особенных" есть коррекционная педагогика, в просторечии - "школы для даунов".
3. ТС сам, без принуждения, написал, что ничего не понимает в приведенном ИМ ЖЕ коде. И нахер он сюда приперся, в этом случае? Ты понимаешь разницу между "помочь понять" и "научить с нуля"?
нубы шуршат, ардуинки трещат)
Moro_500, вы мимо со своей благотворительностью. ТС-у не пример нужен, а готовый код, вероятно для какого-то зачета... Если бы он хотел научиться - понимал бы. что надо разобраться в сути кода, без этого пример бесполезен. А раз огрызается - значит типичный двоешник- халявщик.
Ну и раз вы вылезли - разберем и ваш код. Вы что такое выложили? :) Мне нравятся комменты:
Да. без делей :) Но что толку? Вы в курсе. что такая конструкция так же блокирует МК, как задержка? - тогда зачем выпендриваться, так и пишите delay(2000);. А ваш код только путает нубов.
Ну и про основной цикл. Нафига две отдельных ветки? Что помешало все сделать в одной? Вам же v258 выше показал как.
Короче, незачет. Вылезли не по делу с индусским кодом :)))
почитав немного форум, прихожу к выводу что тут в основном посылают книшки пачитать, вот ТС и психанул, это же раздел для новичков, чё вы такие злые
И в догонку. Тут принято учить новичков нормальному программированию, а не говнокоду. Если даешь пример, будь добр:
- не использовать глобальные переменные без нужды (твой interval - должен быть static внутри loop());
- не переопределять имеющиеся константы (уже есть LED_BUILTIN);
- не использовать неточные типы. millis() возвращает uint32_t, а не unsigned long;
- не писать тавтологии (digitalRead(LED)==HIGH) и (digitalRead(LED)) - одно и тоже.
- не вызывать millis() сто раз подряд, а использовать промежуточное значение.
- давать нормальные имена переменным, твой interval - не интервал.
короче нужно так:
ТС-у нужно принципиально чтоб без delay, и чтоб начинала моргать только через 2 секунды после запуска, и она не блокирует МК, это пустой цикл, в который если надо, можно добавить какие-то действия.
Ну и про основной цикл. То есть вы предлагаете такую конструкцию?
А вы в курсе, что это, собственно, и есть две ветки, только ещё и две лишние переменные, statusLed и start. Тогда зачем выпендриваться, садитесь, два.
Может ссылку кто даст с чего начать?
Язык я русский плохо знаю это да.
Зарплату я сам себе выплачиваю.
Тем кто не должен можно идти мимо, я спросил помощь а помочь или нет это каждый сам решает.
Вот представьте что человек тонет, а вы вместо того чтобы руку подать стоите рядом и спрашиваете а почему тонущий возле воды оказался, почему не научился до этого плавать.
Может лучше сделать вид что вас рядом нет?
А вообще мне кажется что скудность ума у многих вызывает непреодолимое желание скрыть те крохи знаний которые у этого индивида есть.
Может лучше сделать вид что вас рядом нет?
На твой вопрос тебе ответили. Даже с кодом и даже я (бес попутал!). Список книг - в прикрепленной теме в Песочнице, читать умеешь? Ну хоть по слогам?
Тогда "сделай вид, что тебя нет", пожалуйста. Если еще раз станешь давать советы старым, незнакомым дядькам - ответ будет грубее.
А вообще мне кажется что скудность ума у многих вызывает непреодолимое желание скрыть те крохи знаний которые у этого индивида есть.
Может лучше сделать вид что вас рядом нет?
На твой вопрос тебе ответили. Даже с кодом и даже я (бес попутал!). Список книг - в прикрепленной теме в Песочнице, читать умеешь? Ну хоть по слогам?
Тогда "сделай вид, что тебя нет", пожалуйста. Если еще раз станешь давать советы старым, незнакомым дядькам - ответ будет грубее.
Такое чувство что кроме как писать вы ничего не можете.
Лесом....
Вообще как-то странно тут у вас на форуме.
Живёте как звери, всё тут у вас не по человечески.
Раздел для новичков, а тема по созданию новых тем в общем форме.
Поиск убогий.
На людей многие кидаются.
Под мобильные устройства сайт не заточен.
Да сгинь ты уже отсюда. Тут же плохо, Зачем приперся, убогий?
Да сгинь ты уже отсюда. Тут же плохо, Зачем приперся, убогий?
Это ты убогий.
Сколько пафоса, жесть.
Даже с кодом и даже я (бес попутал!).
О, великий, а что ж это у вас там за куча переменных, экономией оперативки брезгуете? А что за куча проверок каждый цикл происходит, зачем процессорное время экономить, и так пойдёт, видимо, у вас свои понятия о говнокоде.
Но должен отметить, вы ,в отличии от остальных комментаторов, кроме того что пытаетесь здесь самоутвердиться и поучить как жить, ещё и по делу что-то подсказываете и приводите примеры. Моё почтение.
Да сгинь ты уже отсюда. Тут же плохо, Зачем приперся, убогий?
По интернету смелый смотрю.
На улице наверное сразу обдалаешся
короче нужно так:
Думаю чего не хватает? Begin и end жешь!)))))
О, великий, а что ж это у вас там за куча переменных, экономией оперативки брезгуете? А что за куча проверок каждый цикл происходит, зачем процессорное время экономить, и так пойдёт, видимо, у вас свои понятия о говнокоде.
Я написал, почему у тебя говнокод. Нужно не спорить, а понять. Не отросла женилка спорить со мной в области программирования. Я прокомментирую в расчете на то, что ты просто с языком программирования знаком поверхностно, а не выё..ывашься на пустом месте.
1. Куча переменных.
Константы не занимают память, а обрабатываются на этапе компиляции. Итого у меня 5 байт на стеке и 5 байт статических. Память следует использовать так, чтобы было удобно. Свободную память на привозе не продашь. МК - не компьютер, где свободная память достанется другим процессам, тут нет других.
2. Ты вероятно не знаешь, как по стандарту работают логические операторы в if. Про конъюнкции проверяется первое условие и, если оно ложно, остальные не проверяются. Итог можешь посчитать.
---------------------------------
Если готов учиться - тут всегда помогут. У тебя реально только две грубые ошибки, остальное моя вкусовщина:
1. вызов миллис без промежуточной переменной (такой стиль тебя вообще когда-нибудь приведет к бессонной неделе в поисках глюка);
2. Глобальная переменная interval (лишние глобалы - очень частый источник ошибок, старайся глобалы использовать вообще в исключительных случаях, когда без них никак нельзя).
Вот так никогда не делай, только мелкий говнокод при отладке - тут все программисты ленятся.
Может ссылку кто даст с чего начать?
http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/pesochnitsa-dl...
Как ее можно не заметить?
Может ссылку кто даст с чего начать?
http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/pesochnitsa-dl...
Как ее можно не заметить?
Большое спасибо. Буду читать книги и учиться. Мне это и надо
wdrakula, а что, мы уже на ты? Хорошо, не буду спорить насчёт переменных, знания поверхностные, хотя, как я понимаю, у тебя статических 5 байт а у меня 4, но:
1. Зачем у тебя каждый цикл выполняется этот лишний первый if, когда можно было сделать эту задержку 2 секунды вне цикла, первый if выполнится всего 1 раз при включении, а дальше будет каждый цикл бесполезно выполняться, тратить процессорное время, код красивый, но не эффективный, хотя, даже и не красивый, каша какая-то запутанная.
2. Миллис в моём примере, так же как и в твоём, вызывается каждый цикл, тысячи раз в секунду, только плюс ещё каждое включение-выключение светодиода, получается тысячи + 2 раза в секунду, преклоняюсь перед твоим мастерством оптимизации.
wdrakula, а что, мы уже на ты? Хорошо, не буду спорить насчёт переменных, знания поверхностные, хотя, как я понимаю, у тебя статических 5 байт а у меня 4, но:
1. Зачем у тебя каждый цикл выполняется этот лишний первый if, когда можно было сделать эту задержку 2 секунды вне цикла, первый if выполнится всего 1 раз при включении, а дальше будет каждый цикл бесполезно выполняться, тратить процессорное время, код красивый, но не эффективный, хотя, даже и не красивый, каша какая-то запутанная.
2. Миллис в моём примере, так же как и в твоём, вызывается каждый цикл, тысячи раз в секунду, только плюс ещё каждое включение-выключение светодиода, получается тысячи + 2 раза в секунду, преклоняюсь перед твоим мастерством оптимизации.
Я затрахался объяснять молодежи. В сети принято (было) обращение на "ты", а "вы" считалось приглашением к срачу. Постепенно сетевые обычаи забились, но я дядька старый, я этот инет еще строил и привычки менять не собираюсь.
1. Тут я не стал тебе писать, но придется, как вижу. НЕЛЬЗЯ в сетапе писать что-то, не относящееся к настройкам. Так очень многие делают, но лучше поставить флаг в лупе, он займет один такт на проверку и два на переход. Наполнение сетапа мусором рано или поздно приведет к ошибкам. Либо нужно быть ну оч-ччень внимательным человеком.
2. Ты спорить начал? Я ж и нахер пошлю.;)) Просто потом ты вставишь между вызовами миллис что-то долгое, какой-нибудь сетевой вызов, работу с сериалом и пр. А изменить схему программы забудешь, потому что привык к говнокоду. Говнокод сам по себе работает и даже, иногда, быстрее нормального. Но "говнокодер" повторяет привычные приемы, когда этого уже делать нельзя. Не нужно учиться говнокодить, это потом само придет. Пиши правильно сразу. Особенно пока учишься.
Дракула, оставь их... нафига на них время тратить? день пройдет, ветерок подует - и нет их....
Дракула, оставь их... нафига на них время тратить? день пройдет, ветерок подует - и нет их....
Да чот настроение плохое, ноги ноют - погода штоле меняется? Снег насыпался, как же он задрал! В среду мне в ГИМС утром ехать - теорию сдавать, а для меня поездка в Москву - пытка каждый раз! А ГИМС в центре (на Чистых прудах), на машине невозможно, придется на электричке. А на электричке в гребаной маске, будь она неладна со всеми ковидами! Плюс еще Чип и Дип надул с деталькой и на почту не отвечает... Короче - бардак и в душе раздрай! Наданапиццо!
Да чот настроение плохое, ноги ноют - погода штоле меняется? Снег насыпался, как же он задрал!
Короче - бардак и в душе раздрай! Наданапиццо!
вот видишь как... а я наоборот, снег люблю. С утра с женою на лыжах сходили в ближайший лес, погода седня для того просто замечательная, такая по нынешним зимам - редкость.
wdrakula, этот лишний первый if процессор будет каждый цикл:
1. Сравнивать isBlinking
2. Вычитать oldMillis из newMillis
3. Сравнивать результат со StartDelay
По поводу чё там рано или поздно приведёт, чё я вставлю, изменить забуду, можно много фантазировать, теоретически и метеорит может в любую минуту на голову упасть, у тебя опыта и знаний больше, согласен, но мы щас обсуждаем конкретный пример, задачу ТС, для меня эффективность кода важнее чем на твой взгляд якобы правильность.
НЕЛЬЗЯ в сетапе писать что-то, не относящееся к настройкам. Так очень многие делают, но лучше поставить флаг в лупе
Не вижу ничего криминального в добавлении пары строк в конец сетапа, чтобы процессор не выполнял 1000 раз в секунду одно и то же бесполезное говно, твой пример не эффективный это факт, не буду отговаривать, можешь и дальше писать свой "правильный говнокод".
wdrakula, этот лишний первый if процессор будет каждый цикл:
1. Сравнивать isBlinking
2. Вычитать oldMillis из newMillis
...дальше тупизна...
Если ты настолько туп, что не смог запомнить то, что написано парой постов выше, то нужно выбирать профессию дворника. По стандарту языка C++ условия, соединенные конъюнкцией - (на твоем языке - И), вычисляются слева направо, пока не встретится false (ЛОЖЬ - на твоем языке). Таким образом, как только isBlinking станет истиной, никто не будет вычислять ничего, кроме (not isBlinking).
В целом - нахер. Форум не место для дискуссий новичков. Твоя задача или слушать, что говорят или идти нахер. Мне совершенно насрать - как ты будешь потом писать код и будешь ли вообще. Тебе сказали - как надо, на этом мои педагогические обязательства перед собой выполнены. Ты - не мой студент, делай как хочешь.
Конечно сейчас меня не интересует как написать абсолютно правильно.
У меня в планах первый проект и он не должен быть сложным.
Лампочкой помаргал, шим тоже получился и это получится. Чем проще тем лучше.
Думаю через пару дней получится написать самому или с вашей помощью.
Однозначно лучше самому пытаться. Сюда за помощью целесообразно обращаться, если столкнешься с проблемой, решение которой не описано однозначно в букварях по С++. То есть с действительно сложной программно-аппаратной ситуацией. Но тогда и тон разговора будет совсем другой, поверь. И помощь будет. Но так же поверь, 99,9% всех проблем начинающих ардуинщиков можно решить чтением вышеуказанного букваря.
false (ЛОЖЬ - на твоем языке)
Ого, чо серьёзно? А на твоём?
Форум не место для дискуссий новичков.
Форум не твой, а общий, для новичков есть отдельный раздел, а для таких умников, которых мёдом не корми, дай поучить как жить, есть раздел "Отвлеченные темы", так что соблюдайте, господа, правила форума, модераторов на вас нет, банить некому, вот вы и спамите тут.
Форум не твой, а общий, для новичков есть отдельный раздел, а для таких умников, которых мёдом не корми, дай поучить как жить, есть раздел "Отвлеченные темы", так что соблюдайте, господа, правила форума, модераторов на вас нет, банить некому, вот вы и спамите тут.
Это так, от модератора:
"8. Здесь действует "дедовщина", бездоказательные пререкания будут пресекаться в пользу "старослужащего". Причина: уровень подготовки старожилов известен, ваш, еще нужно подтвердить."
bwn, уровень подготовки дедов здесь как я посмотрю "доверяй но проверяй". Причина: "правильный говнокод".
bwn, уровень подготовки дедов здесь как я посмотрю "доверяй но проверяй". Причина: "правильный говнокод".
у тебя и такова нет
у тебя и такова нет
пост #13
у тебя и такова нет
пост #13
Ну да. ТС хотел, чтобы светодиод начинал мигать через две секунды после включения питания, а ты вообще ардуину на две секунды застопорил. Молодец, че )))