Есть замечательный пульт управления для четырех нагрузок, но у него есть небольшой недостаток. Логическая единица у него работает только пока нажата одна из кнопок на пульте.
Для того, что бы с его помощью можно было удаленно включать и выключать реле необходимо добавить к нему arduino.
Вот, что в итоге получилось
Скетч для arduino
int flag_1=0;
int flag_2=0;
int flag_3=0;
int flag_4=0;
void setup()
{
Serial.begin(9600);
//выход
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
//вход, включаем подтягивающие резисторы
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
digitalWrite(A0,HIGH);
}
void loop()
{
// кнопка 1 на пульте
if(digitalRead(10)==HIGH&&flag_1==0)//если кнопка нажата и переменная flag равна 0 , то ...
{
flag_1=1;
//это нужно для того что бы с каждым нажатием кнопки происходило только одно действие
}
if(digitalRead(10)==LOW&&flag_1==1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то ...
{
Serial.println("Button 1");
digitalWrite(9,!digitalRead(9));
flag_1=0;//обнуляем переменную flag
}
// кнопка 2 на пульте
if(digitalRead(11)==HIGH&&flag_2==0)//если кнопка нажата и переменная flag равна 0 , то ...
{
flag_2=1;
//это нужно для того что бы с каждым нажатием кнопки происходило только одно действие
}
if(digitalRead(11)==LOW&&flag_2==1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то ...
{
Serial.println("Button 2");
digitalWrite(8,!digitalRead(8));
flag_2=0;//обнуляем переменную flag
}
// кнопка 3 на пульте
if(digitalRead(12)==HIGH&&flag_3==0)//если кнопка нажата и переменная flag равна 0 , то ...
{
flag_3=1;
//это нужно для того что бы с каждым нажатием кнопки происходило только одно действие
}
if(digitalRead(12)==LOW&&flag_3==1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то ...
{
Serial.println("Button 3");
digitalWrite(7,!digitalRead(7));
flag_3=0;//обнуляем переменную flag
}
// кнопка 4 на пульте
if(digitalRead(A0)==HIGH&&flag_4==0)//если кнопка нажата и переменная flag равна 0 , то ...
{
flag_4=1;
//это нужно для того что бы с каждым нажатием кнопки происходило только одно действие
}
if(digitalRead(A0)==LOW&&flag_4==1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то ...
{
Serial.println("Button 4");
digitalWrite(6,!digitalRead(6));
flag_4=0;//обнуляем переменную flag
}
}
int flag_2=0;
int flag_3=0;
int flag_4=0;
void setup()
{
Serial.begin(9600);
//выход
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
//вход, включаем подтягивающие резисторы
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
digitalWrite(A0,HIGH);
}
void loop()
{
// кнопка 1 на пульте
if(digitalRead(10)==HIGH&&flag_1==0)//если кнопка нажата и переменная flag равна 0 , то ...
{
flag_1=1;
//это нужно для того что бы с каждым нажатием кнопки происходило только одно действие
}
if(digitalRead(10)==LOW&&flag_1==1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то ...
{
Serial.println("Button 1");
digitalWrite(9,!digitalRead(9));
flag_1=0;//обнуляем переменную flag
}
// кнопка 2 на пульте
if(digitalRead(11)==HIGH&&flag_2==0)//если кнопка нажата и переменная flag равна 0 , то ...
{
flag_2=1;
//это нужно для того что бы с каждым нажатием кнопки происходило только одно действие
}
if(digitalRead(11)==LOW&&flag_2==1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то ...
{
Serial.println("Button 2");
digitalWrite(8,!digitalRead(8));
flag_2=0;//обнуляем переменную flag
}
// кнопка 3 на пульте
if(digitalRead(12)==HIGH&&flag_3==0)//если кнопка нажата и переменная flag равна 0 , то ...
{
flag_3=1;
//это нужно для того что бы с каждым нажатием кнопки происходило только одно действие
}
if(digitalRead(12)==LOW&&flag_3==1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то ...
{
Serial.println("Button 3");
digitalWrite(7,!digitalRead(7));
flag_3=0;//обнуляем переменную flag
}
// кнопка 4 на пульте
if(digitalRead(A0)==HIGH&&flag_4==0)//если кнопка нажата и переменная flag равна 0 , то ...
{
flag_4=1;
//это нужно для того что бы с каждым нажатием кнопки происходило только одно действие
}
if(digitalRead(A0)==LOW&&flag_4==1)//если кнопка НЕ нажата и переменная flag равна - 1 ,то ...
{
Serial.println("Button 4");
digitalWrite(6,!digitalRead(6));
flag_4=0;//обнуляем переменную flag
}
}
Есть небольшой минус данной реализации, свойственный опросу кнопок по циклу. Иногда кнопка на пульте не срабатывает. 100% решением данной проблемы являются прерывания в микроконтроллерах, но в ардуине с этим пока туго.
Если будут предложения по решению данной проблемы, буду признателен.