Включение одного реле с отключением всех остальных
- Войдите на сайт для отправки комментариев
Здравствуйте, нужна помощь.
Есть 4 реле и 3 светодиода, нужно реализовать что бы при включении одного реле со светодиодом все оставшиеся 3 реле со светодиодами отключались. Так же при включении на другое реле включался другой светодиод, а все предыдущие отключались. То есть 2 реле или LED НЕ должны одновременно быть включены.
К примеру:
Вкл. 1 реле и 1 LED, все остальное Off;
Вкл. 3 реле и 3 LED, все остальное Off;
Вкл. 4 реле, все остальное LED и реле Off.
Сделать это с помощью digitalWrite без проблем можно, вот только будет очень много комбинаций с включением реле по таймерам на разные время и получается очень много раз писать digitalWrite очень грамоздко и отжирает памяти много (в старом проекте так реализовано сейчас).
Отлично подходит управление через регистры портов в бинарной системе одной строчкой:
DDRD = 0b00100010;
Вот только теряется возможность универсально в начале скетча переназначить пин для смены на другую ногу реле или LED и для переноса на другой МК может быть несовместимость с портами.
Может знаете какой нибудь способ как к примеру с помощью #define добавить универсальности, либо как нибудь с помощью массивов уменьшить кол-во вызовов digitalWrite?
Массивы и циклы использовать не пробовал ?
У него памяти на 7 вызовов нет, куда уж тут массивы.
Одну функцию написать - входной параметр=номер реле которое надо включить. В теле ВСЕ реле/диоды выключаешь и ОДНО реле/диод (номер во входном параметре) включаешь.
Нашёл Макросы Аскольда Волкова.
Вот только примеры с управлением по одному пину на порту:
А хотелось бы управление сразу свем портом "DDRD = 0b00100010;"...
А хотелось бы управление сразу свем портом "DDRD = 0b00100010;"...
Маска не подходит?
Otto не туда вас несет ! Откуда уверенность что на другом МК вообще есть DDRD ?
Kakmyc по вашему коду будут короткие моменты, когда будут включены два реле ! Иногда это приводит к белому дыму на силовой части ...
Otto не туда вас несет ! Откуда уверенность что на другом МК вообще есть DDRD ?
Kakmyc по вашему коду будут короткие моменты, когда будут включены два реле ! Иногда это приводит к белому дыму на силовой части ...
Ну никто не запрещает сначала выключить всё, а потом уже включать то что надо.
Реальная задача решается исходя из входных данных, а для вакуума и так сойдёт.
Одну функцию написать - входной параметр=номер реле которое надо включить. В теле ВСЕ реле/диоды выключаешь и ОДНО реле/диод (номер во входном параметре) включаешь.
Спасибо за полезный совет. Это то, что нужно одной строчкой.
Работает так, как мне нужно, благодарю за идею о которой не додумался.
Вот демонстрационный пример:
фи... незачет...
судя по примеру, ты схватил не идею, а подскахку.
Если б понял идею - то и вывод в Сериал в ЛУПе тоже сделал бы процедурой, а не тупо копировал четыре одинаковых куска кода...
Это просто демонстрация и всё, мне нужна только функция из примера
Ага, это просто демонстрация того, что ты не умеешь думать сам, можешь только копировать готовые решения...
Хватит дичь пороть. Твои стёбы не интересны )
Это просто демонстрация и всё, мне нужна только функция из примера
Тупая функция. В сетапе, значит, хватило ума реле/светодиоды в цикле отключать, а в функции не хватило )))
В сетапе, значит, хватило ума реле/светодиоды в цикле отключать, а в функции не хватило )))
наверно там где он это списал, в сетапе были циклы. а в остальной программе нет :)
Более того, она (функция) не соответствует требованиям из первого поста
Вкл. 1 реле и 1 LED, все остальное Off;
Вкл. 3 реле и 3 LED, все остальное Off;
Вкл. 4 реле, все остальное LED и реле Off.
Хотелось бы мне посмотреть, как ТС будет реализовывать третью строку ))
Хотелось бы мне посмотреть, как ТС будет реализовывать третью строку ))
да очень просто - скопирует готовую функцию, уберет в ней включение диода и сохранит под новым именем... это его любимый стиль программирования - "копи-паст" называется :)
Вот, для сравнения - его код шестилетней давности: http://arduino.ru/forum/programmirovanie/upravlenie-rele-po-mqtt-na-arduino
Все ровно так же - куча одинаковых кусков кода, размноженных Ctrl-C - Ctrl-V.