Работа со звуком

Автор Deny, 20:54:54

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

Sergevk

Да, тема интересная, а какое преимущество у этого решения против DFPlayer?

Deny

Сергей, я сначала подумал, что там можно  два звука проигрывать, но прочитав, понял, что это вариант ничем чем не отличается от обычного SD,  это то что я  показывал выше. Мне никак не протестировать  вариант 2 SD или вариант два  mp3   плеера.
Как же хорошо работает наша почта.
​Не говорите, если это не изменит тишину к лучшему.

Deny

Итак пробная программа для работы со звуком MP3.

/*


*/
#include "FlySkyIBus.h" // Подключаем библиотеку для работы  IBus
#include <SoftwareSerial.h> //Библиотека для подключения доп. портов  Serial
#include <DFPlayer_Mini_Mp3.h> // Библиотека для работы MP3


//  переменные приемника
#define THROTTLE_MAX 2000      // max value of throttle pulse length
#define THROTTLE_MIN 950      // max value of throttle pulse length
#define NEUTRAL_THROTTLE 1500   // this is the duration in microseconds of neutral throttle
#define THROTTLE_IDDLE 150      // (1100 - 950) above this value engine breaks from idle to run mode
#define THROTTLE_SIGNAL_IN 4 // INTERRUPT 0 = DIGITAL PIN 2 - use the interrupt number in attachInterrupt
#define THROTTLE_SIGNAL_IN_PIN 19 // INTERRUPT 0 = DIGITAL PIN 2 - use the PIN number in digitalRead


// булевые переменные плеера


boolean wlaczony1 = false;
boolean wlaczony2 = false;
boolean wlaczony3 = false;
boolean wlaczony4 = false;
boolean wlaczony5 = false;
boolean wlaczony6 = false;
boolean wlaczony7 = false;


volatile int nThrottleIn = NEUTRAL_THROTTLE; // volatile,мы устанавливаем это в прерывании и читаем его в цикле, таким образом, это должно быть объявлено volatile
volatile unsigned long ulStartPeriod = 0; // устанавлеваем переменную прерывания
volatile boolean bNewThrottleSignal = false; // устанавливаем прерывание и читаем его в цикле


SoftwareSerial mySerial(5, 26); // RX, TX пины приема и передачи библиотеки Serial


void setup() {


  Serial.begin(115200);
  IBus.begin(Serial1); //
  mySerial.begin (9600);
  mp3_set_serial (mySerial);  //set softwareSerial for DFPlayer-mini mp3 module
  mp3_set_volume (19); //Громкость работы звукового модуля от 0 до 30
  //mp3_play(1);
  attachInterrupt(THROTTLE_SIGNAL_IN, calcInput, CHANGE);
}


void loop() {


  IBus.loop();


  if (bNewThrottleSignal)
  {


    Serial.println(nThrottleIn);
    //====================================================================================================
    if (nThrottleIn < 990) {
      mp3_stop();
      wlaczony2 = false;
    }


    if (nThrottleIn > 1000 && nThrottleIn < 1400 && wlaczony7 == false) {


      mp3_play(7);
      // mp3_stop();
      wlaczony7 = true;
      wlaczony1 = false;
      wlaczony3 = false;
      wlaczony4 = false;
      wlaczony5 = false;
      wlaczony6 = false;
      wlaczony2 = false;
    }
    //=====================================================================================================
    if (nThrottleIn > 1400 && nThrottleIn < 1600 && wlaczony1 == false) {
      mp3_play(2);
      //  mp3_stop();
      wlaczony1 = true;
      wlaczony2 = false;
      wlaczony3 = false;
      wlaczony4 = false;
      wlaczony5 = false;
      wlaczony6 = false;
      wlaczony7 = false;
    }


    //====================================================================================================


    if (nThrottleIn > 1800 && wlaczony3 == false) {


      mp3_play(3);
      //  mp3_stop();
      wlaczony3 = true;
      wlaczony2 = false;
      wlaczony1 = false;
      wlaczony4 = false;
      wlaczony5 = false;
      wlaczony6 = false;
      wlaczony7 = false;
    }


if (nThrottleIn > 1600  && nThrottleIn < 1800 && wlaczony5 == false)
{
 
  mp3_play(5);
  wlaczony5 = true;
      wlaczony2 = false;
      wlaczony1 = false;
      wlaczony4 = false;
      wlaczony3 = false;
      wlaczony6 = false;
      wlaczony7 = false;
}


   
  }


  if (IBus.readChannel(4) >= 1800)
  {
    mp3_play(4);
  }




  bNewThrottleSignal = false;


  Serial.print(IBus.readChannel(0));
  Serial.print(" - ");
  Serial.print(IBus.readChannel(1));
  Serial.print(" - ");
  Serial.print(IBus.readChannel(2));
  Serial.print(" - ");
  Serial.print(IBus.readChannel(3));
  Serial.print(" - ");
  Serial.print(IBus.readChannel(4));
  Serial.print(" - ");
  Serial.print(IBus.readChannel(5));
  Serial.print(" - ");
  Serial.println(nThrottleIn);
}


void calcInput()
{
  if (digitalRead(THROTTLE_SIGNAL_IN_PIN) == HIGH)
  {


  }
  else
  {
    if (IBus.readChannel(1) && (bNewThrottleSignal == false))
    {
      nThrottleIn = (int)(IBus.readChannel(1));
      bNewThrottleSignal = true;
    }
  }
}



1. Использую аппаратуру флай скай (работа по IBUS)
2. MP3  плеер (звуки на SD  карте должны быть записаны 0001.mp3, 0002. mp3 ect... так же система ест  файлы в формате wav)
3. Динамик обычный от Тайген,  подключен непосредственно к усилителю mp3  плеера.
4. Плата ардуино мега.

RX mp3  подключен к 26 пину (пин может быть любым, который вы назначите в SoftwareSerial mySerial(5, 26); // RX, TX пины приема и передачи библиотеки Serial)
приемник FLY SKY  подключен к 19 пину.


Достиг изменения  звука со сменой увеличения или уменьшения скорости!
Недостаток: есть слышимая пауза между переключениями треков.
если долго не трогаешь стик газа  трек проигрывается до конца и замолкает.
​Не говорите, если это не изменит тишину к лучшему.

Sergevk

> если долго не трогаешь стик газа трек проигрывается до конца и замолкает.
А если не дожидаться конца трека а перезапускать его незадолго до конца (например за секунду?)

Deny

Будет играть,  он как бы начинается заново.
​Не говорите, если это не изменит тишину к лучшему.

Deny

Итак проверенна работа двух MP3  модулей на один динамик, все работает  нормально! проблема  корректном коде для двух сериалов. ((((
​Не говорите, если это не изменит тишину к лучшему.