Прорисовать логику работы 1 кнопка - несколько действий

Тема в разделе "Arduino & Shields", создана пользователем Максим B, 23 окт 2018.

  1. Максим B

    Максим B Гуру

    Всем привет.

    Для управления люстрой от пульта ДУ использую код

    Код (Text):

    if ((results.value == 0x36) || (results.value == 0x10036))
        {
         mySwitch.send(7652200,24);
        }
     
    , т.е. 1 раз нажал - включилась, 2-й раз нажал - выключилась. Но так работает только 1 единственная группа кнопок.

    Как реализовать управление еще 1 группой лампочек, т.е:

    1 - 1 включаем 4 лампы -команда посылки 0x36 || 0x10036 команда отправки mySwitch.send(7652200,24);
    2- если снова нажали, то выключается люстра,
    3- если снова нажали, то включились 3 лампы , другие команда посылки 0x36 || 0x10036 команда отправки mySwitch.send(7652550,24);
    4 - если снова нажали, то выключается люстра
    5- включаем все лампы - команда посылки 0x36 || 0x10036, команда отправки mySwitch.send(7652200,24); и mySwitch.send(7652550,24);
    6 - выключаем люстру
    Далее по новой


    Можно хотя бы толкнуть в алгоритм, а то пока не соображу через, if или case или while такое реализовать. Спасибо
     
  2. Vovka

    Vovka Гик

    хранить в переменных, что посылали последний раз и сколько раз нажимали кнопку
     
  3. Максим B

    Максим B Гуру

    Вот набросал.

    Код (Text):

    int flag=0;


    if ((results.value == 0x36) || (results.value == 0x10036) && flag==0)
        {
         mySwitch.send(7652200,24);  // 1 включаем 4 лампы -команда посылки 0x36 || 0x10036 команда отправки mySwitch.send(7652200,24);
         flag = 1;
        }
       
    if ((results.value == 0x36) || (results.value == 0x10036) && flag==1)
        {
         mySwitch.send(7652200,24); // если снова нажали, то выключается люстра,
         flag =2;
        }  

    if ((results.value == 0x36) || (results.value == 0x10036) && flag==2)
        {
         mySwitch.send(7652550,24); // если снова нажали, то включились 3 лампы , другие команда посылки 0x36 || 0x10036 команда отправки mySwitch.send(7652550,24);
         flag =3;
        }

    if ((results.value == 0x36) || (results.value == 0x10036) && flag==3)
        {
         mySwitch.send(7652550,24); // если снова нажали, то выключается люстра
         flag =4;
        }      
    if ((results.value == 0x36) || (results.value == 0x10036) && flag==4)
        {
         mySwitch.send(7652200,24);
         delay(100);
         mySwitch.send(7652550,24); // включаем все лампы - команда посылки 0x36 || 0x10036, команда отправки mySwitch.send(7652200,24); и mySwitch.send(7652550,24);
         flag = 5;
        }  

    if ((results.value == 0x36) || (results.value == 0x10036) && flag==6)
        {
         mySwitch.send(7652200,24);
         delay(100);
         mySwitch.send(7652550,24); // Выключаем люстру
         flag = 0;
        }          

     
    Еще к сожалению не проверял, но правильно или все таки нет?
     
  4. b707

    b707 Гуру

    Код (C++):
    int flag=0;


    if ((results.value == 0x36) || (results.value == 0x10036))
        {
         if      ( (flag == 0) || (flag == 1)) mySwitch.send(7652200,24);
         else if ( (flag == 2) || (flag == 3)) mySwitch.send(7652550,24);
         else if ( (flag == 4) || (flag == 5))
          { mySwitch.send(7652200,24);
            delay(100);
            mySwitch.send(7652550,24);
          }

       if (++flag == 6) flag =0;
    }
     
    Последнее редактирование: 25 окт 2018
    Максим B нравится это.
  5. Максим B

    Максим B Гуру

    Спасибо.
     
  6. b707

    b707 Гуру

    я только переписал Ваш код покороче. А по смыслу он идентичен предыдущему. так что за правильность команд отвечаете Вы сами :)
     
  7. Максим B

    Максим B Гуру

    Не заработало
     
  8. Максим B

    Максим B Гуру

    Вот еще 1 код накидал. Не знаю заработает или нет.

    Код (Text):

    int n=1;
    void setup() {
       инициализация
    }
    void loop() {
     
       if ((results.value == 0x36) || (results.value == 0x10036)) {
         
          delay(1000);
           
           ++n;
           if (n>6) n=1;
       }
        switch(n) {
           case 1:
               mySwitch.send(7652200,24);
               break;
           case 2:
               mySwitch.send(7652200,24);
               break;
               
           case 3:
               mySwitch.send(7652550,24);
               break;  
               
           case 4:
               mySwitch.send(7652550,24);
               break;  
               
           case 5:
               mySwitch.send(7652200,24);
               mySwitch.send(7652550,24);
               break;  
       
           case 6:
               mySwitch.send(7652200,24);
               mySwitch.send(7652550,24);
               break;  
               
            }
      }