Помощь с кодом для remotexy

Тема в разделе "Arduino & Shields", создана пользователем PreD3D, 5 май 2020.

  1. PreD3D

    PreD3D Нерд

    доброго времени суток Уважаемые форумчане ! столкнулся с большой проблемой для меня -- использую сервис RemoteXY - все отлично сделал проект - все работает, но вот захотелось мне чтоб при нажатии кнопки - воспроизводилось звуковое уведомление ! сделал - но звук воспроизводится пока держу нажатой кнопку ! хочется чтоб звук воспроизводился допустим 4 секунды. но никак не могу разобраться с этим(( в написании я - полный ноль (( может кто поможет в реализации моей задумки? что не так в коде? код прилагаю :
    Код (C++):
    /*
       -- фары JEEP --
     
       This source code of graphical user interface
       has been generated automatically by RemoteXY editor.
       To compile this code using RemoteXY library 2.4.3 or later version
       download by link http://remotexy.com/en/library/
       To connect using RemoteXY mobile app by link http://remotexy.com/en/download/                  
         - for ANDROID 4.5.1 or later version;
         - for iOS 1.4.1 or later version;
       
       This source code is free software; you can redistribute it and/or
       modify it under the terms of the GNU Lesser General Public
       License as published by the Free Software Foundation; either
       version 2.1 of the License, or (at your option) any later version.  
    */


    //////////////////////////////////////////////
    //        RemoteXY include library          //
    //////////////////////////////////////////////

    // определение режима соединения и подключение библиотеки RemoteXY
    #define REMOTEXY_MODE__ESP8266_HARDSERIAL_POINT

    #include <RemoteXY.h>

    // настройки соединения
    #define REMOTEXY_SERIAL Serial
    #define REMOTEXY_SERIAL_SPEED 115200
    #define REMOTEXY_WIFI_SSID "JEEP"
    #define REMOTEXY_WIFI_PASSWORD "87654321"
    #define REMOTEXY_SERVER_PORT 6377


    // конфигурация интерфейса
    #pragma pack(push, 1)
    uint8_t RemoteXY_CONF[] =
      { 255,12,0,2,0,19,1,10,187,0,
      1,0,4,37,12,12,2,31,208,146,
      208,155,208,149,208,146,208,158,0,1,
      0,17,23,12,12,2,31,208,146,208,
      146,208,149,208,160,208,165,0,1,0,
      17,50,12,12,2,31,208,146,208,157,
      208,152,208,151,0,1,0,31,37,12,
      12,2,31,208,146,208,159,208,160,208,
      144,208,146,208,158,0,1,0,58,36,
      12,12,2,31,208,146,208,155,208,149,
      208,146,208,158,0,1,0,71,22,12,
      12,2,31,208,146,208,146,208,149,208,
      160,208,165,0,1,0,84,36,12,12,
      2,31,208,146,208,159,208,160,208,144,
      208,146,208,158,0,1,0,71,50,12,
      12,2,31,208,146,208,157,208,152,208,
      151,0,1,9,4,2,12,12,134,31,
      208,146,208,154,208,155,0,1,9,30,
      2,12,12,134,31,208,161,208,146,208,
      149,208,162,0,1,9,57,2,12,12,
      134,31,208,161,208,146,208,149,208,162,
      0,1,9,83,2,12,12,134,31,208,
      146,208,154,208,155,0,129,0,12,16,
      21,6,17,208,155,208,149,208,146,208,
      144,208,175,0,129,0,65,16,24,6,
      17,208,159,208,160,208,144,208,146,208,
      144,208,175,0,129,0,42,23,15,6,
      1,74,69,69,80,0,69,1,5,3,
      10,10 };
     
    // структура определяет все переменные и события вашего интерфейса управления
    struct {

        // input variables
      uint8_t button_1; // =1 если кнопка нажата, иначе =0
      uint8_t button_2; // =1 если кнопка нажата, иначе =0
      uint8_t button_3; // =1 если кнопка нажата, иначе =0
      uint8_t button_4; // =1 если кнопка нажата, иначе =0
      uint8_t button_5; // =1 если кнопка нажата, иначе =0
      uint8_t button_6; // =1 если кнопка нажата, иначе =0
      uint8_t button_7; // =1 если кнопка нажата, иначе =0
      uint8_t button_8; // =1 если кнопка нажата, иначе =0
      uint8_t button_9; // =1 если кнопка нажата, иначе =0
      uint8_t button_10; // =1 если кнопка нажата, иначе =0
      uint8_t button_11; // =1 если кнопка нажата, иначе =0
      uint8_t button_12; // =1 если кнопка нажата, иначе =0

        // output variables
      int16_t sound_1; // =0 нет звука, иначе ID звука, для примера 1001, смотри список звуков в приложении
        // other variable
      uint8_t connect_flag;  // =1 if wire connected, else =0

    } RemoteXY;
    #pragma pack(pop)

    /////////////////////////////////////////////
    //           END RemoteXY include          //
    /////////////////////////////////////////////

    #define PIN_BUTTON_1 5
    #define PIN_BUTTON_2 4
    #define PIN_BUTTON_3 7
    #define PIN_BUTTON_4 6
    #define PIN_BUTTON_5 11
    #define PIN_BUTTON_6 10
    #define PIN_BUTTON_7 12
    #define PIN_BUTTON_8 13
    #define PIN_BUTTON_9 2
    #define PIN_BUTTON_10 3
    #define PIN_BUTTON_11 8
    #define PIN_BUTTON_12 9


    void setup()
    {
      RemoteXY_Init ();
     
      pinMode (PIN_BUTTON_1, OUTPUT);
      pinMode (PIN_BUTTON_2, OUTPUT);
      pinMode (PIN_BUTTON_3, OUTPUT);
      pinMode (PIN_BUTTON_4, OUTPUT);
      pinMode (PIN_BUTTON_5, OUTPUT);
      pinMode (PIN_BUTTON_6, OUTPUT);
      pinMode (PIN_BUTTON_7, OUTPUT);
      pinMode (PIN_BUTTON_8, OUTPUT);
      pinMode (PIN_BUTTON_9, OUTPUT);
      pinMode (PIN_BUTTON_10, OUTPUT);
      pinMode (PIN_BUTTON_11, OUTPUT);
      pinMode (PIN_BUTTON_12, OUTPUT);
     
      // TODO you setup code
     
    }

    void loop()
    {
      RemoteXY_Handler ();
     
      digitalWrite(PIN_BUTTON_1, (RemoteXY.button_1==0)?LOW:HIGH);
      digitalWrite(PIN_BUTTON_2, (RemoteXY.button_2==0)?LOW:HIGH);
      digitalWrite(PIN_BUTTON_3, (RemoteXY.button_3==0)?LOW:HIGH);
      digitalWrite(PIN_BUTTON_4, (RemoteXY.button_4==0)?LOW:HIGH);
      digitalWrite(PIN_BUTTON_5, (RemoteXY.button_5==0)?LOW:HIGH);
      digitalWrite(PIN_BUTTON_6, (RemoteXY.button_6==0)?LOW:HIGH);
      digitalWrite(PIN_BUTTON_7, (RemoteXY.button_7==0)?LOW:HIGH);
      digitalWrite(PIN_BUTTON_8, (RemoteXY.button_8==0)?LOW:HIGH);
      digitalWrite(PIN_BUTTON_9, (RemoteXY.button_9==0)?LOW:HIGH);
      digitalWrite(PIN_BUTTON_10, (RemoteXY.button_10==0)?LOW:HIGH);
      digitalWrite(PIN_BUTTON_11, (RemoteXY.button_11==0)?LOW:HIGH);
      digitalWrite(PIN_BUTTON_12, (RemoteXY.button_12==0)?LOW:HIGH);


      uint32_t start_time = 0;



      if (RemoteXY.sound_1 == 0) {  // если мелодия в данный момент не играет
        if (RemoteXY.button_1 != 0) {  // если кнопка нажата
          start_time = millis ();  // запоминаем время когда начали проигрывание
          RemoteXY.sound_1 = 1;  // и запускаем проигрывание
         }
      }
      else {  // иначе молодия играет
        if (millis () - start_time  >= 4000 ) {   // если время проигрывания 4 секунды уже истекло
          RemoteXY.sound_1 = 0;  // останавливаем проигрывание мелодии в RemoteXY
        }
      }
    }
     
      // TODO you loop code
      // используйте структуру RemoteXY для передачи данных
      // не используйте функцию delay()
     
  2. Daniil

    Daniil Гуру

    вот тут нужно взводить флаг.
    Далее в цикле loop сделать отдельный if для флага, если он взведен, то воспроизводим мелодию сколько нужно. По окончанию мелодии обязательно сбросить флаг.
     
    PreD3D и NikitOS нравится это.
  3. PreD3D

    PreD3D Нерд

    Не сочтите за наглость( , не могли бы Вы дописать чего не хватает ? Если конечно Вас не затруднит..
     
  4. NikitOS

    NikitOS Public enemy Администратор

    С самому не интересно разобраться?
     
  5. b707

    b707 Гуру

    имхо, в этом коде RemoteXY.sound_1 уже работает как флаг, если я правильно понял идею ТС
    В этом случае достаточно statr_time обозначить как static
     
    Последнее редактирование: 6 май 2020
    PreD3D нравится это.
  6. Daniil

    Daniil Гуру

    Я извиняюсь, но с RemoteXY я не работал, поэтому не буду писать код, который не могу проверить. Тем более, что выше уже начали предлагать другие варианты
     
  7. PreD3D

    PreD3D Нерд

    наконец то сделал чтоб звук отыгрывал сколько нужно. Всем огромнейшее спасибо за помощь и подсказки !
     
    Daniil нравится это.