Anpassungen für Player mit dem DFROBOT LISP3 Chip

Ich habe eine Lösung dafür gefunden, die unabhängig davon ob ein Player das EndOfTrack Event nach Advert ausgibt oder nicht, funktioniert. Es ist also keine Unterscheidung mehr notwendig ob der Player das bei Advert ausgibt oder nicht.
Dazu habe ich eine boolVariable AdvPlaying eingefügt, die beim Abspielen von Advert auf true gesetzt wird.

// ******************** DF-Player **************************************************
// DFPlayer Mini
SoftwareSerial mySoftwareSerial(2, 3); // RX, TX   // Digitalpins zur Steuerung des DF-Players
uint8_t numFolders;                                // Anzahl der Ordner im Speichermedium
uint8_t numTracksInFolder;                         // Anzahl der Tracks im Ordner 
uint8_t firstTrack;                                // erster Track
uint8_t currentQueueIndex;                         // index in queue[] aktuelle Tracknr in der queue
uint8_t queueSize;                                 // Länge der queue
uint8_t queue[255];                                // max 255 tracks/folder. entries 0..254 and values 1..255 are used.
uint8_t volume;                                    // Lautstärke
bool AdvPlaying = false;                           // Advert wird abgespielt, Voreinstellung Nein

Wird jetzt ein Advert abgespielt und der Player gibt ein EndOfTrack Event aus, wird bei AdvPlaying = true ,die Anweisung nextTrack(track); nicht ausgeführt. Im Code sieht das so aus:

    // Meldung vom Df Player - Track beendet ,                                  Meldung erfolgt
    static void OnPlayFinished(DfMp3_PlaySources source, uint16_t track)    //  am Ende von normalen mp3 Files 
    {                                                                       //  am Ende von Files aus dem mp3-Ordner
    delay(100);
                                                                            // Zusatzabfrage für DF-Player, die auch am Ende
                                                                            // von Adverts ein Track beendet ausgeben. z.B.DFROBOT DF 290
    if(!AdvPlaying)                                                         // Wenn kein Advert abgespielt wurde
      {
// #ifdef Konsole
      PrintlnSourceAction(source, "OPFin -> nxtTr");                        //  wird am Ende von advert-Tracks nicht gesendet
// #endif
      nextTrack(track);                                                     // Wenn der Track regulär beendet wird , nextTrack.
      }
     AdvPlaying = false;                                                    // Marker zurücksetzen dass Advert gespielt wurde
    }                                                                       // außer bei advert-Tracks

Zu jeder PlayAdvert Anweisung wurde das setzen der Variable AdvPlaying auf true hinzugefügt.
z.B.

 mp3.playAdvertisement(302);                 //advert-302- Schlummerfunktion aktiviert.
        AdvPlaying = true;

Vielleicht geht das auch eleganter. Ich habe es erst mal so gelöst.

1 „Gefällt mir“