Помогите с дистанционным управлением на ARDUINO по радиоканалу

Тема в разделе "Arduino & Shields", создана пользователем Evgen-82, 16 май 2016.

  1. Evgen-82

    Evgen-82 Нерд

    Добрый день, теребуется помощь, нужно создать 4 независимых триггера, нужно на ардуино, хочу задействовать дистанционное управление освещением по радиоканалу, есть 6 комплектов радиомодулей, но они без так называемой защелки, т.е., нагрузка включена пока удерживаешь нажатой кнопку на пульте.
    Нужно реализовать что бы при поступлении короткого импульса логической 1 на вход ардуино, на выходе появлялась постоянная 1, при повторном поступлении лог. 1 на вход ардуино, на выходе лог. 1 сменялась на лог. 0. и таких 4 канала надо.
     

    Вложения:

  2. Evgen-82

    Evgen-82 Нерд

    Я тут набрасал примерно то что нужно, код работает, но сыро, как сделать так, что бы при удержании кнопки одна и та же команда не повторялась постоянно



    int LedPin1=13;
    int LedPin2=12;
    int LedPin3=11;
    int LedPin4=10;

    int ButPin1=2;
    int ButPin2=3;
    int ButPin3=4;
    int ButPin4=5;

    void setup()
    {
    pinMode(LedPin1, OUTPUT);
    pinMode(LedPin2, OUTPUT);
    pinMode(LedPin3, OUTPUT);
    pinMode(LedPin4, OUTPUT);
    }

    void loop()

    {
    if(digitalRead(ButPin1)==HIGH)
    {
    digitalWrite(LedPin1, !digitalRead(LedPin1));
    delay(500);
    }

    if(digitalRead(ButPin2)==HIGH)
    {
    digitalWrite(LedPin2, !digitalRead(LedPin2));
    delay(500);
    }
    if(digitalRead(ButPin3)==HIGH)
    {
    digitalWrite(LedPin3, !digitalRead(LedPin3));
    delay(500);
    }
    if(digitalRead(ButPin4)==HIGH)
    {
    digitalWrite(LedPin4, !digitalRead(LedPin4));
    delay(500);
    }
    }
     
  3. Vetrinus

    Vetrinus Гик

    Код (C++):
    #define LedPin1 13
    #define LedPin2 12
    #define LedPin3 11
    #define LedPin4 10

    #define ButPin1 2
    #define ButPin2 3
    #define ButPin3 4
    #define ButPin4 5

    bool channel_1=false;
    bool channel_2=false;
    bool channel_3=false;
    bool channel_4=false;

    bool state_1;
    bool state_2;
    bool state_3;
    bool state_4;

    bool is_pushed1=false;
    bool is_pushed2=false;
    bool is_pushed3=false;
    bool is_pushed4=false;

    void setup() {
      pinMode(LedPin1, OUTPUT);
      pinMode(LedPin2, OUTPUT);
      pinMode(LedPin3, OUTPUT);
      pinMode(LedPin4, OUTPUT);
      pinMode(ButPin1, INPUT);
      pinMode(ButPin2, INPUT);
      pinMode(ButPin3, INPUT);
      pinMode(ButPin4, INPUT);
    }

    void loop() {
      state_1=digitalRead(ButPin1);
      state_2=digitalRead(ButPin2);
      state_3=digitalRead(ButPin3);
      state_4=digitalRead(ButPin4);

      if (state_1 && !is_pushed1) {
        channel_1=!channel_1;
        is_pushed1=true;
      }
      else {
        is_pushed1=false;
      }
        if (state_2 && !is_pushed2) {
        channel_2=!channel_2;
        is_pushed2=true;
      }
      else {
        is_pushed2=false;
      }
        if (state_3 && !is_pushed3) {
        channel_3=!channel_3;
        is_pushed3=true;
      }
      else {
        is_pushed3=false;
      }
        if (state_4 && !is_pushed4) {
        channel_4=!channel_4;
        is_pushed4=true;
      }
      else {
        is_pushed4=false;
      }
      digitalWrite(LedPin1, channel_1);
      digitalWrite(LedPin2, channel_2);
      digitalWrite(LedPin3, channel_3);
      digitalWrite(LedPin4, channel_4);
      delay(500);
    }
     
    Теперь команда не будет отправлятся до тех пор, пока не будет отжата кнопка.
     
    Последнее редактирование: 17 май 2016
  4. Evgen-82

    Evgen-82 Нерд

     
  5. Evgen-82

    Evgen-82 Нерд

    Благодарю! !!
     
  6. Evgen-82

    Evgen-82 Нерд

    ВСЕМ СПАСИБО, ТЕМА ЗАКРЫТА!!!