Официальный сайт компании Arduino по адресу arduino.cc
Управление четырьмя релле через пульт 2262/2272
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 29/12/2020 - 23:15
Всем привет!
С помощью пульта, NANO, релейного блока и блока питания.
Собрал схему управления.
Паять чуток умею, а с программированием пока только разбираюсь.
С помощью форума смог написать управление от каждой кнопки:
int knopkaA=0; int knopkaB=0; int knopkaC=0; int knopkaD=0; void setup () { pinMode(8,OUTPUT); pinMode(7,OUTPUT); pinMode(6,OUTPUT); pinMode(5,OUTPUT); pinMode(10,INPUT); pinMode(12,INPUT); pinMode(9,INPUT); pinMode(11,INPUT); } void loop () {//***************КНОПКА A********************************// if(digitalRead(10)==HIGH&&knopkaA==0)//если кнопка нажата // и перемення "knopka" равна 0 , то ... { delay(50);//защита от дребезга knopkaA++;//пишем 1 в переменную кнопка //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие digitalWrite(8, !digitalRead(8));//меняем значение порта на противоположное } if(digitalRead(10)==LOW&&knopkaA==1)//если кнопка НЕ нажата //и переменная knopka равна - 1 ,то ... { knopkaA=0;//обнуляем переменную "knopka" } //***********************КНОПКА B*****************************// if(digitalRead(12)==HIGH&&knopkaB==0)//если кнопка нажата // и перемення "knopkaB" равна 0 , то ... { delay(50); knopkaB++;//пишем 1 в переменную кнопка //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие digitalWrite(7,!digitalRead(7)); } if(digitalRead(12)==LOW&&knopkaB==1)//если кнопка НЕ нажата //и переменная knopka2 равна - 1 ,то ... { knopkaB=0;//обнуляем переменную "knopkaB" } //***********************КНОПКА C*****************************// if(digitalRead(9)==HIGH&&knopkaC==0)//если кнопка нажата // и перемення "knopkaC" равна 0 , то ... { delay(50); knopkaC++;//пишем 1 в переменную кнопка //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие digitalWrite(6,!digitalRead(6)); } if(digitalRead(9)==LOW&&knopkaC==1)//если кнопка НЕ нажата //и переменная knopka2 равна - 1 ,то ... { knopkaC=0;//обнуляем переменную "knopkaB" } //***********************КНОПКА D*****************************// if(digitalRead(11)==HIGH&&knopkaD==0)//если кнопка нажата // и перемення "knopkaD" равна 0 , то ... { delay(50); knopkaD++;//пишем 1 в переменную кнопка //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие digitalWrite(5,!digitalRead(5)); } if(digitalRead(11)==LOW&&knopkaD==1)//если кнопка НЕ нажата //и переменная knopkaD равна - 1 ,то ... { knopkaD=0;//обнуляем переменную "knopkaD" } }
Работает.
Но есть необходимость при долгом нажатии кнопки А выключить все релле.
Помогите советом.
Благодарю заранее!
Алгоритм такой:
при нажатии кнопки А запоминаем миллис.
добавляем еще один иф по условию - knopkaA++==1 И превышен интервал ожидания, тогда и включаем все реле
И еще - строка 26 и ей аналогичные, ИМХО, в Вашей программе смысла не имеют. Сами подумайте - от какого дребезга они защищают? Если хотите сделать правильно почитайте про работу с кнопками в прилепленой теме.
Благодарю за помощь!
Заработало!
Рабочий, для меня, вариант.
Не, не прокатит. С 36 по 38 строку - бред. Ну не сможете Вы нажимать кнопки быстрее чем проц читает. Поэтому фтопку. С 29 по 33 строку непонятно зачем. В предыдущей программе все было логично, но тут вносится сумятица. А чего к предыдущей программе не добавить лишний условный оператор? Кроме того Ваша переменная valBut только int, а Вы мерите long. А вдруг упертый дурак на кнопке? И вот Вам великое переполнение. Не выдумывайте х-ню, а пользуйтесь стандартным (Millis()-lastMillis)>чему-то там.
А дребезг решается конденсатором в параллель кнопки, причем так, что статистические методы нервно курят в углу. А уж LC цепочка...
Уже прокатило и работает.
Я программист от бога, по этому это программный Франкенштейн собранный из разных уроков.
Кнопка исключительно для меня по этому городить различных защит не имеет смысла, на моего дурака хватит.
на добивание сама сборка:
Упакую в корпус, если вспомню, отчитаюсь.
Благодарю за советы в будущем учту.
С наступающими!