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

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

  1. ostrov

    ostrov Гуру

    Любите же вы эти кривые библиотеки...

    Код (C++):
    // для плеера
    #define SerialP Serial2 // пин 16 через резистор 1 КОм к RX плеера
    #define PLAY  0x03
    #define VOL   0x06
    #define STOP  0x16
    #define BUSY_MP3  12     // ножка BUSY занятость мп3 (0-играет, 1-молчит)
    byte buff[10] = {0x7E, 0xFF, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF};
    byte nomPlay = 1;
    bool oneplay = 1;

    void setup() {
      pinMode(BUSY_MP3, INPUT);
      SerialP.begin(9600);  // плеер
      play(1);
      delay(5000);
      playToEnd(2);
     
    }

    void loop() {
    }

    void play (byte np) {     // проигрываем запись номер nm в любой момент
      mp3_cmd(PLAY, np);
      delay(100);
    }

    void playToEnd (byte np) {  // проигрываем запись номер nm и ждем пока она закончится
      play (np);
      while (!digitalRead(BUSY_MP3));
    }

    void playIfEnd (byte np) {  // проигрываем запись номер nm если закончилась предыдущая
      if (!digitalRead(BUSY_MP3)) return;
      play (np);
    }

    void playWaitEnd (byte np) {  // ждем когда закончится предыдущая и проигрываем запись номер nm
      while (!digitalRead(BUSY_MP3));
      play (np);
    }

    void stopPlay () {
      mp3_cmd(STOP, 0);
      delay(100);
    }

    void mp3_cmd (byte com, byte atr) {  // команда на плеер
      buff[3] = com;
      buff[6] = atr;
      mp3_check(buff);
      for (byte i = 0; i < 10; i++) {
        SerialP.write(buff[i]);
      }
    }

    void mp3_check (uint8_t *buf) {      // КС для плеера
      uint16_t sum = 0;
      for (byte i = 1; i < 7; i++) {
        sum += buf[i];
      }
      sum = -sum;
      *(buf + 7) = (uint8_t)(sum >> 8);
      *(buf + 8) = (uint8_t)sum;
    }
     
  2. Basilio83

    Basilio83 Нерд

    не компилируется
     
  3. ostrov

    ostrov Гуру

    Плата какая?
     
  4. Basilio83

    Basilio83 Нерд

  5. ostrov

    ostrov Гуру

    Вы конечно заменили Serial2 которого на Уно нет на Serial?
     
  6. Basilio83

    Basilio83 Нерд

    совсем нуб, а схемку подключения можно
     
  7. Basilio83

    Basilio83 Нерд

    совсем нуб, а схемку подключения можно
     
  8. ostrov

    ostrov Гуру

  9. Basilio83

    Basilio83 Нерд

     
  10. Basilio83

    Basilio83 Нерд

    Спасибо подключил работает но не понимаю что есть что в скетче
     
  11. Basilio83

    Basilio83 Нерд

    Не подскажите как сделать трек по кругу при нажатии кнопки?
     
  12. ostrov

    ostrov Гуру

    Там функции которые можно использовать. Причем они подписаны кто что делает. И небольшой пример в два разных действия. Что конкретно не понятно?
     
  13. Basilio83

    Basilio83 Нерд

    Как запихать play(1); в void loop а не в setup как в вашем скетче. Задача: нажал кнопку трек играет по кругу и лед горит, пока еще раз не нажал.
     
  14. ostrov

    ostrov Гуру

    Это называется триггер.
     
  15. Basilio83

    Basilio83 Нерд

    void setup() {
    pinMode(11, OUTPUT);// установил выход на 11 пин
    }
    void loop()
    {
    if(digitalRead(8)==HIGH&&flag==0)
    // если на 8 входе есть сигнал и переменная равна 0 то...
    {
    digitalWrite(11,!digitalRead(11));//меняем значение выхода на противоположное
    flag=1;
    delay (1000);
    }
    if(digitalRead(8)==LOW&&flag==1)
    //если на 8 входе нет сигнал и переменная равна 1 то...
    {
    flag=0;
    //обнуляем переменную
    delay (1000);
    }
    }
     
  16. Basilio83

    Basilio83 Нерд

    Это все работает как быть с мп3
     
  17. ostrov

    ostrov Гуру

    Плеер работает самостоятельно, независимо от МК. Надо лишь дать ему команду на проигрывание и заниматься своими делами.
     
  18. Basilio83

    Basilio83 Нерд

    Да но если в loop ставить play(1) получается постоянное икание, контроллер все время включает play
     
  19. Basilio83

    Basilio83 Нерд

    if(digitalRead(11)==HIGH&&digitalRead(BUSY_MP3)==HIGH)
    // если на 11 выходе есть сигнал и на BUSY_MP3 есть то...
    {
    playToEnd(1);
    delay(5000);
    }
    пытался таким образом с вашим скетчем, но ничего не происходит
     
  20. Basilio83

    Basilio83 Нерд

    библиотека DFPlayer library V2.0 как пользоваться командой void mp3 single loop (boolean state); что нужно писать в скобках, если можно пример