Помогите разобраться с UART DFPlayer Mini 2.0

Тема в разделе "Arduino & Shields", создана пользователем Unruly, 27 ноя 2014.

  1. Onkel

    Onkel Гуру

    а громкость мой код тоже не регулирует?
     
  2. Snakepz76

    Snakepz76 Нуб

    Пробовал. И менял fat16 и fat32. И флешки 256мб, 12 Гб, 64гб(что странно, заявленно до 32) . Про иероглифы писал - я имело ввиду, что порт передает данные в плеер. Сегодня попробую сам создать мп3 файлы. Хотя мало надежды, так как другие то проигрывает
     
  3. Snakepz76

    Snakepz76 Нуб

    Я не очень в программировании. Я ваш код вставил в сетап, задал переменную volume . Если это верно то о не работает.
     
  4. ostrov

    ostrov Гуру

    Нафиг библиотеки, они глючные. А иероглифы и должны быть, командные символы нечитаемы. Схему сборки в студию, куда что подключили.
     
  5. Snakepz76

    Snakepz76 Нуб




    скетч
    Код (C++):
    #include "DFRobotDFPlayerMini.h"
    // библиотека для эмуляции Serial порта
    #include <SoftwareSerial.h>
    // создаём объект mySoftwareSerial и передаём номера управляющих пинов RX и TX
    // RX - цифровой вывод 10, необходимо соединить с выводом TX дисплея
    // TX - цифровой вывод 11, необходимо соединить с выводом RX дисплея
    SoftwareSerial mySoftwareSerial(10, 11); // RX, TX для плеера DFPlayer Mini
    DFRobotDFPlayerMini myDFPlayer;
    int buttonNext = 2;   // кнопка следующий трек
    int buttonPause = 3;  // кнопка пауза/ пуск
    int buttonPrevious = 4; // кнопка предыдущий трек
    int buttonVolumeUp = 5; // кнопка увеличение громкости
    int buttonVolumeDown = 6; // кнопка уменьшение громкости


    int buttonPlayTrack = 7; // играть трэк 1


    boolean isPlaying = false; // статус воспроизведения/пауза
    void setup() {
      pinMode(buttonPause, INPUT_PULLUP);
      pinMode(buttonNext, INPUT_PULLUP);
      pinMode(buttonPrevious, INPUT_PULLUP);
      pinMode(buttonVolumeUp, INPUT_PULLUP);
      pinMode(buttonVolumeDown, INPUT_PULLUP);


      pinMode(buttonPlayTrack, INPUT_PULLUP);

     
      mySoftwareSerial.begin(9600);
      Serial.begin(9600);
      delay(1000);
      Serial.println();
      Serial.println("DFPlayer Mini Demo");
      Serial.println("Initializing DFPlayer...");
      if (!myDFPlayer.begin(mySoftwareSerial)) {
        Serial.println("Unable to begin:");
        Serial.println("1.Please recheck the connection!");
        Serial.println("2.Please insert the SD card!");
        while (true);
      }
      Serial.println(F("DFPlayer Mini online."));
      myDFPlayer.setTimeOut(300);
      //----Set volume----
      myDFPlayer.volume(15); //Set volume value (0~30).
      //----Set different EQ----
      myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
      myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
      myDFPlayer.play(1); //Воспроизведение первого mp3
      isPlaying = true; // воспроизводим
      Serial.println("Playing..");
      //----Читать информацию----
      Serial.println(myDFPlayer.readState()); //читать состояние mp3
      Serial.println(myDFPlayer.readVolume()); //Текущая громкость
      Serial.println(myDFPlayer.readEQ()); // читаем настройку эквалайзера
      Serial.println(myDFPlayer.readFileCounts()); // читать все файлы на SD-карте
      Serial.println(myDFPlayer.readCurrentFileNumber()); // текущий номер файла воспроизведения
    }
    void loop() {
      if (digitalRead(buttonPause) == LOW) {
        if (isPlaying) { // если было воспроизведение трека
          myDFPlayer.pause(); // пауза
          isPlaying = false; // пауза
          Serial.println("Paused..");
        } else {        // иначе
          isPlaying = true; // воспроизводим
          myDFPlayer.start(); //запускаем mp3 с паузы
        }
        delay(500);
      }
      if (digitalRead(buttonNext) == LOW) {
        if (isPlaying) {
          myDFPlayer.next(); //Next Song
          Serial.println("Next Song..");
        }
        delay(500);
      }
      if (digitalRead(buttonPrevious) == LOW) {
        if (isPlaying) {
          myDFPlayer.previous(); //Previous Song
          Serial.println("Previous Song..");
        }
        delay(500);
      }
      if (digitalRead(buttonVolumeUp) == LOW) {
        if (isPlaying) {
          myDFPlayer.volumeUp(); //Volume Up
          Serial.println("Volume Up..");
        }
        delay(500);
      }
      if (digitalRead(buttonVolumeDown) == LOW) {
        if (isPlaying) {
          myDFPlayer.volumeDown(); //Volume Down
          Serial.println("Volume Down..");
        }
        delay(500);
      }

     
       if (digitalRead(buttonPlayTrack) == LOW) {
        if (isPlaying) {
          myDFPlayer.play(0001); //играть трэ1 номер 1
          Serial.println("Play mp3/0001.mp3");
        }

       
        delay(500);
    }
    }
     
  6. ostrov

    ostrov Гуру

    Почему просто схему не накидать хоть от руки за 5 минут? Видео какие-то. (
     
  7. Snakepz76

    Snakepz76 Нуб

    Только через резисторы по 1кОм
     

    Вложения:

    • 4533.750.jpg
      4533.750.jpg
      Размер файла:
      233,3 КБ
      Просмотров:
      25
  8. b707

    b707 Гуру

    а нафига они там?
     
  9. ostrov

    ostrov Гуру

    На ТХ надо резистор, провод RX вообще не нужен. Я про сторону контроллера.
     
  10. Snakepz76

    Snakepz76 Нуб

    Все спаял , а не на макетке. Заработало. Всем спасибо
     
  11. Snakepz76

    Snakepz76 Нуб

    Вопрос открыт ) оказалось на модулях разные микросхемы. 22ss - общается с сериал. GD 3200B - нет, или пока не понял как
     
  12. ostrov

    ostrov Гуру

    Купил пять штук с чипом AC20BP09473 не так давно, работает один раз, после чего ни на что не откликается. Не все плееры одинаковы полезны.
     
  13. Snakepz76

    Snakepz76 Нуб

    Как думаете, что имеется ввиду))
     

    Вложения:

  14. parovoZZ

    parovoZZ Гуру

    имеется ввиду, что очередные лохи клюнули на удочку
     
  15. Kot26ru

    Kot26ru Нерд

    Приветствую! Не подскажите, почему файл мп3 воспроизводится только первые 2-3 секунды, а потом тишина? файл на карте памяти один, находится в папке MP3, называется 0001.mp3. Длительность самого файла 2 минуты.
     
  16. Snakepz76

    Snakepz76 Нуб

    Как управляете ? Попробуйте без МК , пины минус и ио замкните
     
  17. Kot26ru

    Kot26ru Нерд

    схема без ардуины. Короткий импульс на ИО подаю
     
  18. Snakepz76

    Snakepz76 Нуб

    Код (C++):
    Serial.begin(9600);
    Serial.write( 0x7E);
    Serial.write( 0xFF);
    Serial.write( 0x08);
    Serial.write( 0x03);
    Serial.write( 0x00);
    Serial.write( 0x00);
    Serial.write( 0x02);
    Serial.write( 0xFE );
    Serial.write( 0xE6);
    Serial.write( 0xEF);
    Вот так заработало
     
  19. Snakepz76

    Snakepz76 Нуб

    Начинается воспроизведение при отпускании кнопки. Если через библиотеку, то сразу, как и нкжно. Не знаете как изменить?
    Код (C++):
    #include <IRremote.h>  //биб-ка ИК


    unsigned long oldtime,     // программный таймер
             timeFire,  // скорострельность
             timemillis, //  программный таймер
             timeResist; // время уезвимости

    byte RECV_PIN = 11;    // выход ИК-приемника
    byte button = 2;       //кнопка выстрела


    byte LedGameOver = 13; // светодиод повязки
    int life;     // жизни
    int bullet;   // патроны
    boolean flagGameOver;  //состояние игры
    IRsend irsend (3);             // выход ик вывод 3
    IRrecv irrecv(RECV_PIN);  //определяем вход
    decode_results results;   //результат декодирования



    void Play(byte NofSound) {

      //delay(1);


      Serial.begin(9600);
      Serial.write( 0x7E);
      Serial.write( 0xFF);
      Serial.write( 0x08);
      Serial.write( 0x03);
      Serial.write( 0x00);
      Serial.write( 0x00);
      Serial.write( NofSound + 1);
      Serial.write( 0xFE );
      Serial.write(  byte(0xF8 - NofSound - 1));
      Serial.write( 0xEF);

      //delay(12);

    Serial.end();
    //Serial.begin(9600);
    }


    void Updategame()  //обновление игры
    {
      timemillis = millis();
      if (timeResist < timemillis)     // Шок 2 сек
      {

        if (life > 0) digitalWrite(LedGameOver, LOW);  // выкл светодиод
      }
      if (life < 1 && flagGameOver == LOW )
      {
        flagGameOver = HIGH;

        Play(0);
        digitalWrite(LedGameOver, HIGH);  // вкл светодиод
      }



    }


    void UpdateIRin() // обработка принятых данных
    {
      if (irrecv.decode(&results))
      {
        //Serial.println(results.value); //"показываем" принятый код
        if (results.value == 1976) // Пополнение life bullet
        {
          timeResist = timemillis + 2000;
          life = 3;   // + 3 жизни
          digitalWrite(LedGameOver, LOW);

          Play(3);

          bullet = 100;  //  +100 патронов
         
         
         
          flagGameOver = LOW;
        }
        if (life > 0)   // если живой
        {

          if (results.value == 2000 && timeResist < timemillis) // если выстрел противника
          {

            timeResist = timemillis + 2000; // уязвимость 2с

            life--;      //  -1 жизнь

            Play(5);

            digitalWrite(LedGameOver, HIGH); // вкл светодиод
          }

          if (results.value == 3772817503) // Game Over   ( Кнопка пульта )
          {
            life = 0;  // 0 жизней
          }



        }
        irrecv.resume();
      }
    }
    void UpdateIRout()   // подпрограмма выстрела
    {
      if (life > 0 && timeResist < timemillis)  // если живой и уязвимый
      {
        if (digitalRead(button) == LOW && timeFire < timemillis ) // если нажат курок
        {
          if (bullet > 0) // если есть патроны
          {
            irsend.sendRC5(1000, 10);  //выстрел ( ик данные )

            bullet--; // -1 патрон

            Play(1);


            irrecv.enableIRIn();      // запускаем прием
          }
          else              // иначе если нет патронов
          { irsend.sendRC5(4000, 10);
            Play(4);
          }
          timeFire = timemillis + 110;  //скорострельность
        }
      }
    }

    void setup()
    {
      Serial.begin(9600);

      irrecv.enableIRIn();      // "запускаем" прием
      //pinMode(13, OUTPUT);    // назначить выводу порт ввода



      pinMode(button,  INPUT_PULLUP);           // назначить выводу порт ввода
      digitalWrite(button, HIGH);                 // включить подтягивающий резистор

      pinMode(LedGameOver, OUTPUT);    // назначить выводу порт ввода
      digitalWrite(LedGameOver, LOW);  // выкл светодиод


    }



    void loop() {





      UpdateIRin();

      Updategame();

      UpdateIRout();


    }