1

Topic: Вопрос по звуковому уведомлению

Что-то не пойму как мне включить звуковое уведомление в последней версии вашей программы.

2

Re: Вопрос по звуковому уведомлению

Эта функция пока еще недоступна. Появится в самое ближайшее время.

3

Re: Вопрос по звуковому уведомлению

Ребят в общем разобрался со звуками. Но хочется чтоб при нажатии на кнопку button_ - файл проигрывался полностью , а не пока кнопка нажата.. Как реализовать?

4

Re: Вопрос по звуковому уведомлению

pred3d wrote:

Ребят в общем разобрался со звуками. Но хочется чтоб при нажатии на кнопку button_ - файл проигрывался полностью , а не пока кнопка нажата.. Как реализовать?

Нет возможности проиграть файл и остановить в конце. Файл проигрывается по кругу пока установлена соответствующая переменная в структуре RemoteXY. Но вы можете запрограммировать проигрывание столько сколько нужно по времени даже после отпускания кнопки.
Код будет примерно такой:

uint32_t start_time = 0;

void loop () {

  if (RemoteXY.sound_1 == 0) {  // если мелодия в данный момент не играет
    if (RemoteXY.button_1 != 0) {  // если кнопка нажата
      start_time = millis ();  // запоминаем время когда начали проигрывание
      RemoteXY.sound_1 = 2001;  // и запускаем проигрывание
     }
  }
  else {  // иначе молодия играет
    if (millis () - start_time  >= 10000 ) {   // если время проигрывания 10 секунд уже истекло
      RemoteXY.sound_1 = 0;  // останавливаем проигрывание мелодии в RemoteXY
    }
  }  
}

5

Re: Вопрос по звуковому уведомлению

remotexy wrote:
pred3d wrote:

Ребят в общем разобрался со звуками. Но хочется чтоб при нажатии на кнопку button_ - файл проигрывался полностью , а не пока кнопка нажата.. Как реализовать?

Нет возможности проиграть файл и остановить в конце. Файл проигрывается по кругу пока установлена соответствующая переменная в структуре RemoteXY. Но вы можете запрограммировать проигрывание столько сколько нужно по времени даже после отпускания кнопки.
Код будет примерно такой:

uint32_t start_time = 0;

void loop () {

  if (RemoteXY.sound_1 == 0) {  // если мелодия в данный момент не играет
    if (RemoteXY.button_1 != 0) {  // если кнопка нажата
      start_time = millis ();  // запоминаем время когда начали проигрывание
      RemoteXY.sound_1 = 2001;  // и запускаем проигрывание
     }
  }
  else {  // иначе молодия играет
    if (millis () - start_time  >= 10000 ) {   // если время проигрывания 10 секунд уже истекло
      RemoteXY.sound_1 = 0;  // останавливаем проигрывание мелодии в RemoteXY
    }
  }  
}

убрал старое управление звуком, записал кусок кода , который Вы привели - и теперь звук пытается воспроизводиться самостоятельно при включении контроллера. при чем всегда по разному - проиграет несколько милисекунд - пауза - пару секунд, проиграет почти секунду - пауза - несколько секунд - и так циклично..

6

Re: Вопрос по звуковому уведомлению

не могли бы мне помочь с кодом , чтоб этот таймер отрабатывал как надо? а то в написании кода - я ноль.

7

Re: Вопрос по звуковому уведомлению

что тут не так - подскажите !

/*
   -- фары 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() 

8 (edited by Guillaume 2020-05-06 11:09:43)

Re: Вопрос по звуковому уведомлению

Hello, try this:

void loop() 
{ 
  RemoteXY_Handler ();

  static 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
    }
  }  
}

Note the "static" keyword to the variable start_time. It means that this variable will be initialized only once, kind of like a global variable.

If you need very precise timings like for a music sequencer, then RemoteXY is not the solution because there will always be latency between your controller and your smartphone...

9

Re: Вопрос по звуковому уведомлению

Да, действительно. Вы передвинули объявление переменной start_time в тело цикла loop.
В моем примере переменная объявляется глобальной.