Официальный сайт компании Arduino по адресу arduino.cc
Параллельное управление тремя реле с помощью трех потенциометров
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 25/11/2020 - 15:22
Ребята!
Не бейте сильно новичка за, возможно, глупый вопрос. Я с неделю искал ответ на свой вопрос на различных сайтах, но так и не нашел его. Короче задача:
есть три потенциометра и три реле, хочется управлять временем их "мигания" параллельно. Начал, понятное дело, с использования delay(), и с одним реле это работало норм, но при переносе этого на 3 реле все пошло не туда. Откопал, что можно использовать классы и millis, но тут столкнулся со своим ламерством.
Бен, ай нид хелп! Плиз!))
google: "blink без delay"
Говорю же: я достаточно порылся перед задаванием вопроса, так что этот коммент несколько мимо
а от форума что вы хотите?
Примеры кода находятся как раз по той строчке в гугле, что вам дали ранее. Если есть конкретные вопросы по коду - то задавайте, постараемся ответить. Но готовый код вам никто писать не будет.
Я поясню "на пальцах". Если не поймёшь - ты безнадежен, выбрось бесовскую игрушку и пивка дёрни с пацанами! ;)))
1. Ты придумываешь способ, как связаны времена включенного и выключенного состояний каждого реле с показаниями потенциометров, снятыми через АЦП Ардуины.
2. для каждого реле заводишь четыре переменные: установочное время включенного состояния, выключенного, время последнего переключения, текущее состояние.
3. При каждом входе в loop() ты сперва читаешь потенциометры, пересчитываешь установочные времена реле, для каждого.
3.1. Потом узнаешь текущий счетчик миллисекунд, прошедших от включения контроллера (собственно millis()),
3.2. по каждому реле сравниваешь текущее время с временем последнего переключения этого реле.
3.3. Если прошло времени больше, чем соответствующее установочное значение, переключаешь реле, запоминаешь новое состояние и новое время последнего переключения для этого, конкретного реле.
==========================
Всё.
Это проще сделать классами, но при трех реле и "ламерстве" можешь написать просто для каждого по очереди. Не так красиво выглядит, но объяснять гораздо меньше. ;)))
Установить библиотеку MsTimer2.
Скетч для подсказки
Здесь флаги меняют состояние с интервалами 500, 1000 и 1500 мс, на выходе меандр.
если бы ты достаточно порылся, то и библиотека от DetSimen мимо тебя не прошла бы
Отнюдь.
Этот коммент ПОЛНОСТЬЮ решает Вашу задачу. Просто Вы не потрудились его понять.
Мошт три мультивибратора с потенциометрами и нинатъ никаких дурдуин?
я и слов-то таких не знаю) но пороюсь, спасибо! ардуина действительно не обязательна, а просто была под рукой.
Установить библиотеку MsTimer2.
Скетч для подсказки
Здесь флаги меняют состояние с интервалами 500, 1000 и 1500 мс, на выходе меандр.
спасибо за самый полезный коммент!
Поясню ситуацию: я вообще-то гуманитарий
Если бы я хоть что-то понимал про классы, объективно-ориентированное программирование и прочую математику, я бы тут не задавал вопрос. Если присутствующие месье любят поднимать самооценку на таких гуманитариях вроде меня - очень жаль, что им другим нечем заняться)
Когда я говорю "проискал неделю" - это значит, что попробовав множество запросов я так и не нашел ответ на свой вопрос. Почему-то никто не выкладывал код для трех блинков на трех потцах.
Самое близкое, что я нашел, это вот это:
Но моих мозгов пока не хватило, чтоб понять, куда там прописывать переменные на потенциометр, точнее, как прописанные в объявление класса переменные запросить непосредственно в исполнении.
Нам всё равно - гуманитарий ты или анаконда.
Самый простой способ был "озвучен". Хочешь ты им пользоваться или искать дальше до гробовой доски - решать тебе.
Поясню ситуацию: я вообще-то гуманитарий
Если присутствующие месье любят поднимать самооценку на таких гуманитариях вроде меня - очень жаль, что им другим нечем заняться)
Ну, не только самооценку. Если такие гуманитарии, как ты - не хотят учиться программировать сами - они идут в платный раздел заказывают код за деньги. и поднимают нам не только самооценку, но и благосостояние :)
Поясню ситуацию: я вообще-то гуманитарий
Если присутствующие месье любят поднимать самооценку на таких гуманитариях вроде меня - очень жаль, что им другим нечем заняться)
Ну, не только самооценку. Если такие гуманитарии, как ты - не хотят учиться программировать сами - они идут в платный раздел заказывают код за деньги. и поднимают нам не только самооценку, но и благосостояние :)
Учиться-то я как раз и пытаюсь. Я просто не понимаю логику и пользу форума: если у человека есть время на ответ с своими едкими комментами, то почему же он не может потратить энергию на пользу?
Да, понимаю, таких вот гуманитариев тут много, наверное пишет. Но ведь в этом случае проще, как мне кажется, просто не отвечать, если лень.
Я просто не понимаю логику
ну на то ты и гуманитарий, чтоб не дружить с логикой :)
потому что "отвечать полезно" на идиотские вопросы быстро надоедает, а гуманитарии все идут и идут. И спрашивают либо элементарные вещи. расписанные в сотне учебников. либо откровенную чушь. Куда как веселее их потроллить
Да и выгоднее, как я уже написал выше.
ну на то ты и гуманитарий, чтоб не дружить с логикой :)
У меня есть другая, гуманитарная логика: троллинг без веской причины обратно пропорционален длине уда.
потому что "отвечать полезно" на идиотские вопросы быстро надоедает, а гуманитарии все идут и идут. И спрашивают либо элементарные вещи. расписанные в сотне учебников. либо откровенную чушь. Куда как веселее их потроллить
Да и выгоднее, как я уже написал выше.
Если выгода в посыле в любимое россиянами направление - у меня нет претензий)
Я просто не понимаю логику и пользу форума: если у человека есть время на ответ с своими едкими комментами, то почему же он не может потратить энергию на пользу?
Может, это потому, что технари и гуманитарии понимают пользу по-разному?
Кстати, заодно интересно: правила сетевой этики технари и гуманитарии тоже понимают по-разному? Ну, например, "Прежде, чем писать на форум, следует его хотя бы 2-3 дня почитать".
Если бы Вы последовали этому правилу, то узнали бы, что форум предназначен для общения по интересам. И большинству не интересно общаться с людьми, которые интереса для общения не представляют. А интерес для общения представляют только три категории:
1. Обладающие некоторым минимумом знаний и умений.
2. Желающие научиться знаниям и умениям из п.1.
3. Желающие реализовать конкретный проект и готовые платить за это деньги (это - исключительно в разделе "Ищу исполнителя").
Судя по Вашему заявлению, что Вы гуманитарий, к первой категории Вы не относитесь.
Судя по Вашей реакции на первую же подсказку, ко второй - тоже (подсказка - пост №1, реакция - пост №2).
Остается вопрос - относитесь ли Вы к третьей категории?
Поясню ситуацию: я вообще-то гуманитарий
Один из "гуру" программирования - Алан Голуб, который написал множество книг по практике программистской работы, считает, что лучшие программисты получаются из гуманитариев-филологов. ;))) Вот так вот!
Не могу сказать, что я разделяю эту точку зрения, поскольку я сам - математик, но такое мнение существует.
Я просто не понимаю логику и пользу форума: если у человека есть время на ответ с своими едкими комментами, то почему же он не может потратить энергию на пользу?
Может, это потому, что технари и гуманитарии понимают пользу по-разному?
Кстати, заодно интересно: правила сетевой этики технари и гуманитарии тоже понимают по-разному? Ну, например, "Прежде, чем писать на форум, следует его хотя бы 2-3 дня почитать".
Если бы Вы последовали этому правилу, то узнали бы, что форум предназначен для общения по интересам. И большинству не интересно общаться с людьми, которые интереса для общения не представляют. А интерес для общения представляют только три категории:
1. Обладающие некоторым минимумом знаний и умений.
2. Желающие научиться знаниям и умениям из п.1.
3. Желающие реализовать конкретный проект и готовые платить за это деньги (это - исключительно в разделе "Ищу исполнителя").
Судя по Вашему заявлению, что Вы гуманитарий, к первой категории Вы не относитесь.
Судя по Вашей реакции на первую же подсказку, ко второй - тоже (подсказка - пост №1, реакция - пост №2).
Остается вопрос - относитесь ли Вы к третьей категории?
Приятно, что Вы следуете интернет этике!)
Но Вы несколько поспешно меня судите. Я как раз отношусь к первым двум пунктам. К третьему тоже отношусь, но мне показалось, что мой вопрос настолько простой, что он не перерастет в стандартный форумный срач. Оказалось, я ошибался)
Говоря, что я гуманитарий, я несколько лукавлю, и во многом обобщаю, чтоб не писать лишнюю инфу.
Говоря, что я гуманитарий, я несколько лукавлю, и во многом обобщаю, чтоб не писать лишнюю инфу.
Перевод:
< на самом я лучше, чем говорю о себе... но я же скромный. сами понимаете >
Возвращаемся к началу - если вы готовы учиться - что мешает вам пройти по адресу, указанному в первом ответе и разобраться в вопросе?
...мне показалось, что мой вопрос настолько простой, что он не перерастет в стандартный форумный срач. Оказалось, я ошибался)
Еще раз:
- исчерпывающий ответ был дан в посте №1,
- тема автоматически была переведена в срач постом №2.
Теперь переживать по этому поводу уже поздно.
Поясню ситуацию: я вообще-то гуманитарий
Один из "гуру" программирования - Алан Голуб, который написал множество книг по практике программистской работы, считает, что лучшие программисты получаются из гуманитариев-филологов. ;))) Вот так вот!
Не могу сказать, что я разделяю эту точку зрения, поскольку я сам - математик, но такое мнение существует.
Рискну предположить, что он прав. Меня как-то удивила мысль о том, что художники, работающие с технологиями нередко двигают прогресс и науку вперед - своим гуманитарным подходом к технике. А гуманитарии от программеров, например, могут отличаться большей свободой, основанной на более "аналоговом" мышлении. Впрочем мне этот тип мышления пока что мешает, если говорить о программировании.
Один из "гуру" программирования - Алан Голуб, который написал множество книг по практике программистской работы, считает, что лучшие программисты получаются из гуманитариев-филологов. ;))) Вот так вот!
Не могу сказать, что я разделяю эту точку зрения, поскольку я сам - математик, но такое мнение существует.
Влад, насколько мне известно, образование "у нас" и "у них" несколько отличается по подходам:
наши технари на самом деле также немного гуманитарии, а вот гуманитарии - "чистые гуманитарии",
их технари - "чистые технари", а гуманитарии - также немного технари.
Другими словами, большего успеха добиваются те, в ком сочетаются качества как технарей, так и гуманитариев.
Тс какие классы нафиг ?
Ты без delay() , через millis() хотя бы, диодом помигай.
Если разберёшься с одним, то потом, даже до гуманитария должно дойти, что сущности можно плодить и множить.
Что уже должно решить твою задачу.
Но ты свою тупость (почему то таких много, ты не одинок), скрываешь за гуманитарным мышлением.
Программирование это не технарь/гуманитарий, это умение логически мыслить. И вот тут да, творческий человек , без особых технических знаний, обладая логикой , может составить куда более гениальный алгоритм. Но это не про тебя похоже.
Поясню ситуацию: я вообще-то гуманитарий
Поясню ситуацию: нам вообще-то пох.
Вам дали направление в котором нужно двигаться, вот и двигайтесь.
Если не можете, то объясните толком, чего Вы от нас хотите? Чтобы мы написали Вам готовое решение? Это в коммерческий раздел - там напишут.
У Вас есть ещё какие-то вопросы?
так, я немного продвинулся в сторону успеха, но это все равно еще работает странно. стало работать лучше, чем с delay(), но время задержки потенциометров влияет друг на друга.
получился вот такой код:
Вставьте код нормально
Вставьте код нормально
вставил
Вставьте код нормально
вставил
А где номера строк?
Вставьте код нормально
вставил
А где номера строк?
DONE!
На пины 0 и 1 не стоит ничего навешивать.
На пины 0 и 1 не стоит ничего навешивать.
Почему?
Потому что в Serial ничего нормально вывести не удастся, если потребуется отладка текстом.
Вставьте код нормально
вставил
Не вставил. Где номера строк? Как обсуждать код? Типа "у Вас ошибка в строке №ХЗ ..."
Вставьте код нормально
вставил
Не вставил. Где номера строк? Как обсуждать код? Типа "у Вас ошибка в строке №ХЗ ..."
Может есть какой-то правильный вариант нумерации строк? У меня нумерация отображается
Нигде про это нет ни строчки (возможно есть в даташите), но если опрашивать слишком быстро аналоговые входы, то (возможно из за паразитной ёмкости), имеет место быть влияние их значений на соседние.
Тупо вызовы множественных сущностей основной функции, по времени отдалите друг от друга , хотя бы на пару-тройку миллисекунд , скажем так: delay(5);
Должно пройти
Сейчас отображаются, а когда я писал - нет.
А если так?
Тупо вызовы множественных сущностей основной функции, по времени отдалите друг от друга , хотя бы на пару-тройку миллисекунд , скажем так: delay(5);
Должно пройти
Оо, спасибо, сча проверю!
Для этого достаточно делать аналогрид два раза подряд, не используя результат первого, как мне помнится.
А если так?
Я правильно понимаю, что это пример для одного реле?
Я правильно понимаю, что это пример для одного реле?
Нет, для всех.
И из своего скетча можете убрать строчки 5, 12 и 19.
PS. Ну, может, действительно задержку поставить... Но я обычно ставлю параллельно каждому аналоговому входу конденсатор на 0.01-0.1 uF, тогда и шумов меньше и внутренние емкости не влияют.
Я правильно понимаю, что это пример для одного реле?
Нет, для всех.
И из своего скетча можете убрать строчки 5, 12 и 19.
PS. Ну, может, действительно задержку поставить... Но я обычно ставлю параллельно каждому аналоговому входу конденсатор на 0.01-0.1 uF, тогда и шумов меньше и внутренние емкости не влияют.
а как же я их уберу, если они есть в
delay(5) туда вставлен?)
А toggleRelay1...toggleRelay3 - тоже убрать, заменив одним toggleRelay. В последний при желании можно и delay(5) вставить.
Я правильно понимаю, что это пример для одного реле?
Нет, для всех.
И из своего скетча можете убрать строчки 5, 12 и 19.
PS. Ну, может, действительно задержку поставить... Но я обычно ставлю параллельно каждому аналоговому входу конденсатор на 0.01-0.1 uF, тогда и шумов меньше и внутренние емкости не влияют.
а как же я их уберу, если они есть в
delay(5) туда вставлен?)
про 5,12,19 - дошло)
по delay(5) - вставлял в своем скетче между void toggle, в предложенном Вами между строчек loop, один раз после строчек в loop - результат одинаково глючный(
Конденсаторы на аналоговых входах точно не помешают.
Переменные резисторы штука таинственная, контакт бегунка с подковкой ненадёжен, а кручение рукой процесс неторопливый. Дребезжат так, что кнопки позавидуют. Я как-то забыл в регуляторе яркости светодиодной ленты поставить, при первом же включении вспомнил!
Конденсаторы на аналоговых входах точно не помешают.
Переменные резисторы штука таинственная, контакт бегунка с подковкой ненадёжен, а кручение рукой процесс неторопливый. Дребезжат так, что кнопки позавидуют. Я как-то забыл в регуляторе яркости светодиодной ленты поставить, при первом же включении вспомнил!
попробую обязательно! пока очень странно все работает, и с delay, и без.
Использовать digitalRead() для вывода, настроенного на выход тоже не лучшая идея. Лучше использовать переменные-флаги, получится и быстрее и экономнее по памяти. И скетч будет короче и понятнее.
Использовать digitalRead() для вывода, настроенного на выход тоже не лучшая идея. Лучше использовать переменные-флаги, получится и быстрее и экономнее по памяти. И скетч будет короче и понятнее.
И что же в этой идее плохо ?
В принципе какая разница откуда прочитать состояние , с отдельной переменной (флага) или с регистра порта ввода/вывода
Использовать digitalRead() для вывода, настроенного на выход тоже не лучшая идея. Лучше использовать переменные-флаги, получится и быстрее и экономнее по памяти. И скетч будет короче и понятнее.
Отнюдь.
Все с точностью до наоборот: и идея лучшая, и экономичнее по памяти, чем в случае с флагами.
Да и скетч, как уже показала практика, сократился.
Это Вы просто не разобрались.