управление 4 Reley Module.
- Войдите на сайт для отправки комментариев
Пт, 16/01/2015 - 17:21
Помогите в проекте, надо сделать так что бы релейный модуль на 4 реле, при нажатии кнопки срабатываи все 4 реле сразу, а другие 4 кнопки откючали каждое реле по отдельности. вроде не сложно. но у меня что то ничего не получается.
и еще, если какая то кнопка нажата или все нажаты то реле не влкюается
кнопка1 при любом нажатии переводит все 4 реле в состояние ВКЛ?
кнопка2 переводит РЕЛЕ2 в состояние ВЫКЛ? и т.д.?
т.е. включение только кнопкой1, а выключение только кнопками 1-2-3-4?
последнее предложение не понял. Ни одно реле не должно включаться если нажата хоть одна из кнопок 1-2-3-4?
правельно.
если точнее, есть 5 кнопок (0,1,2,3,4)
кнопка 0 включает все реле. только вкючает.
а кнопки 1,2,3,4 выключают реле, если зажата одна, две или все кнопки, то соответствующее реле не включается.
каждая из 1,2,3,4 кнопки, выкючает тоько 1 реле
нулевая кнопка так хотели? исхожу из того, что кнопка замыкает на GND
остальные кнопки
может все через if реолизовать.
if
Конструкция if проверяет, будет ли выполнено некое условие, такое, как,
например, будет ли аналоговое значение больше заданного числа, и выполняет
какое-то выражение в скобках, если это условие true (истинно). Если нет, то
выражение в скобках будет пропущено. Формат для if следующий:
if (someVariable ?? value) {
}
Пример выше сравнивает someVariable со значением (value), которое может быть
и переменной, и константой. Если выражение или условие в скобках истинно,
выполняется выражение в фигурных скобках. Если нет, выражение в фигурных
скобках пропускается, и программа выполняется с оператора, следующего за
скобками.
Примечание: Остерегайтесь случайного использования «=», как в if (x = 10), что
технически правильно, определяя x равным 10, но результат этого всегда true.
Вместо этого используйте «==», как в if (x == 10), что осуществляет проверку
значения x — равно ли оно 10 или нет. Запомните «=» - равно, а «==» - равно ли?
кнопки можно подсоединить к пинам 8...12 и считывать состояние регистра
далее через swith
01111 = включить все реле
10111 - выкл Р_4
11011 - выкл Р_3
11101 - выкл Р_2
11110 - выкл Р_1
все остальные комбинации - ничего не делать
кнопки через подтяжку к земле !!!!!
http://arduino.ru/Tutorial/Upravlenie_portami_cherez_registry
что другие предлагали не читал толком. просто выскажу свое менние
всего если 5 кнопок как понял, то включить все 4 рэле без проблемм (не считая от ложных срабатываний с использованием delay или millis/micros)
а выключить также несложно
добавляем флаг что все рэле были включены например booalean all_on=1 после нажатия определенной кнопки
после этого в обработку остальных кнопок в условие добавить
if(all_on && digitalRead(button_1) dagitalWrite(channel_1, 0);
if(all_on && digitalRead(button_2) dagitalWrite(channel_2, 0);
if(all_on && digitalRead(button_3) dagitalWrite(channel_3, 0);
if(all_on && digitalRead(button_4) dagitalWrite(channel_4, 0);
не помю как пишется точно, кажется elseif. можно использовать, но сути не меняет
все это дело еще запихнуть в функцию и цикл, цикл в приципе необязателен, как и функция, просто проще для понимания
тут конечно обработки ложных сбаратываний нет. но суть должна быть понятна
всем спасибо, приду с работы буду пробоват
ничего не получается у меня, может кто по подробней описать как что делать?
доброго всем времнеи суток... написал код как хотел, все реле включаются кнопкой "0" выключается каждое реле своей кнопкой.
проблема только вот в чем, при нажатии кнопки "0", все реле включаются даже если кнопки нажаты, после того как кнопку "0" отпускаешь реле кнопки которых зажаты откюлючаюстя
про работу с кнопками почитай. от ложных срабатываний
и можно же написать по другому
правда после else меня смущает, но оставил как есть
про работу с кнопками почитай. от ложных срабатываний
и можно же написать по другому
правда после else меня смущает, но оставил как есть
ложный срабатываний нет. сколько не проверял...
и ваш набросок кода не работает... он только включает все реле разом, не смотря на кнопки 1-4
у тебя кнопки подтянуты куда нибудь?
я в коде добавил подтяжку к плюсу. а ты как делаешь?
реле каким потенциалом замыкает контакты?
Перед кодом "включение всех кнопок" сделать проверку - не нажата ли сейчас кнопка 1-4.
у тебя кнопки подтянуты куда нибудь?
я в коде добавил подтяжку к плюсу. а ты как делаешь?
реле каким потенциалом замыкает контакты?
все кнопки работают с "+", то есть на все кнопи подтсянуты к плюсу, так же и реле.
Перед кодом "включение всех кнопок" сделать проверку - не нажата ли сейчас кнопка 1-4.
а разве мой код не далает это?
чтобы не было путаницы: потянутяжка к плюсу это когда один пин кнопки висит на земле, а второй через резистор к плюсу
потяжка к земле это это когда один пин кнопки висит на плюсе, а второй через резистор к минусу
у тебя как?
Из кода в посте #12 сложно навскидку что-то понять. Получается, что не делает: проблема только вот в чем, при нажатии кнопки "0", все реле включаются даже если кнопки нажаты, после того как кнопку "0" отпускаешь реле кнопки которых зажаты откюлючаюстя
Лучше так:
кнопки на землю и на пины
кнопки на землю и на пины
не могли бы вы прокомментировать каждую строчку, уж очень ваш код понравился! но мало что в нем понял.
Из кода в посте #12 сложно навскидку что-то понять. Получается, что не делает: проблема только вот в чем, при нажатии кнопки "0", все реле включаются даже если кнопки нажаты, после того как кнопку "0" отпускаешь реле кнопки которых зажаты откюлючаюстя
Лучше так:
спасибо большое за код, но сколько я не пробовал внедрить в мою схему, ничего не вышло. так и не понял почему
кнопки на землю и на пины
не могли бы вы прокомментировать каждую строчку, уж очень ваш код понравился! но мало что в нем понял.
он что - сразу заработал ? я про этот способ писал в ##7, 8
спасибо большое за код, но сколько я не пробовал внедрить в мою схему, ничего не вышло. так и не понял почему
пинам 2,3,4,5 не прописана подтяжка....
строка 18 -
pinMode( pinLock[i-1] , INPUT );
// определяем пины на ввод
строка 18А - digitalWrite
( pinLock[i-1] , HIGH );
// включаем подтяжку
а так ?
спасибо большое за код, но сколько я не пробовал внедрить в мою схему, ничего не вышло. так и не понял почему
пинам 2,3,4,5 не прописана подтяжка....
строка 18 -
pinMode( pinLock[i-1] , INPUT );
// определяем пины на ввод
строка 18А - digitalWrite
( pinLock[i-1] , HIGH );
// включаем подтяжку
а так ?
вы уверены что строку "digitalWrite
( pinLock[i-1] , HIGH );" нудно вставить именно в setup.
и да, если ее вставить в меджу 18 и 19 строкой то ничего не меняется.
может я не так подключаю.
вот схема, и код
Его не надо никуда внедрять, это полностью готовый скетч. Сначала надо убедиться что он работает в таком виде, а уж потом переделывать под себя. Что именно не работает?
у человека то подтяжка к минусу, а к говорил что к плюсу
уже говорилось где то что подтяжка к плюсу лучше чем к минусу. да и можно внутренние подтягивающие резисторы использовать
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
для кнопок три основных схемы поключения :
резистор на GND и на PIN , кнопку на VCC и PIN
резистор на VCC и на PIN , кнопку на GND и PIN
кнопку на GND и PIN и digitalWrite( PIN , HIGH ) - схема 2 , только резистор внутренний, а внешнего нет
у вас подключено по схеме 1, мой скетч под схему 3
от какая схема 1 или 2,3 - зависит код в некоторых местах :)
ТС , как успехи во вникании в скетч из #25 ?
Его не надо никуда внедрять, это полностью готовый скетч. Сначала надо убедиться что он работает в таком виде, а уж потом переделывать под себя. Что именно не работает?
возможно он и рабочий, но повторяюсь, что я могу по другому набирать схему, и еще, у меня релейный модуль переделаный. для примера схема должна работать с Led-диод при чем минусовая его нога на минусе.
а не работает собственно все, с моей схемой, при чем повсякому ее переделывал ничего не происходит.
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
для кнопок три основных схемы поключения :
резистор на GND и на PIN , кнопку на VCC и PIN
резистор на VCC и на PIN , кнопку на GND и PIN
кнопку на GND и PIN и digitalWrite( PIN , HIGH ) - схема 2 , только резистор внутренний, а внешнего нет
у вас подключено по схеме 1, мой скетч под схему 3
от какая схема 1 или 2,3 - зависит код в некоторых местах :)
спасибо за разъяснение, я пока не увидел разници чем эти подключения отличаются так что в дальнейшим будем разбираться.
а что по поводу вашего скетч, очень понравился. но так и не смог правильно собрать под нее схему.
а не работает собственно все, с моей схемой, при чем повсякому ее переделывал ничего не происходит.
Схему (хотя бы на бумажке, от руки, а не на словах) надо было выложить в самом первом посте, это сильно ускорило бы решение вопросов. ;)
а что по поводу вашего скетч, очень понравился. но так и не смог правильно собрать под нее схему.
таааааак ! начинаем лоббировать свои схемы и скетчи ! :)
схема всего-то - реле ( включение от HIGH ! ) - на указанные пины , кнопки - на землю и на указанные пины - ВСЁ !
спасибо за разъяснение, я пока не увидел разници чем эти подключения отличаются так что в дальнейшим будем разбираться.
разница небольшая...
аппаратно - схема1 нужен внешний резистор , схема2 нужен внешний резистор , схема2 НЕ нужен внешний резистор
программно - схема1 при отпущенной кнопке при опросе пина получим 0
схема1 при нажатой кнопке при опросе пина получим 1
программно - схема2,3 при отпущенной кнопке при опросе пина получим 1
схема2,3 при нажатой кнопке при опросе пина получим 0
т.е. - схема2,3 - начинает работать обратная-отрицательная логика - значащими становятся не 1 , а 0.... инверсия логики
я туту вычитал то такой rод может не работать, из за назначения пинов микроконтроллера
у меня Arduino UNO R3 c контроллером ATMEGA328P
купи слона))
тогда как управляющие регистры и регистры порта могут быть разными у каждого типа микроконтроллера.
у всех МК они одинаковые, только у кого-то меньше , у кого-то больше - у ATtyni85 - всего один порт B и тот урезан до шести разрядов....
ну, и выводятся физически они на разные ноги микросхемы - всё просто !
http://arduino.ru/forum/obshchii/pin-mapping-sootvetstvie-vyvodov-i-regi...
а та программа под Arduino UNO R3 c контроллером ATMEGA328P и сделана :)