1 1 1 1 1 Rating 4.50 (2 Votes)

Есть замечательный пульт управления для четырех нагрузок, но у него есть небольшой недостаток. Логическая единица у него работает только пока нажата одна из кнопок на пульте.

Для того, что бы с его помощью можно было удаленно включать и выключать реле необходимо добавить к нему 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
     }

 
 }
 
Есть небольшой минус данной реализации, свойственный опросу кнопок по циклу. Иногда кнопка на пульте не срабатывает. 100% решением данной проблемы являются прерывания в микроконтроллерах, но в ардуине с этим пока туго.
 
Если будут предложения по решению данной проблемы, буду признателен.
Log in to comment