DFPlayer verschiedene Versionen

  • Schutz vor unbeabsichtigter Betätigung der Lautstärketasten
  • (nächster/vorheriger Track), wenn die aktuelle Position im Track größer 5 Minuten ist.
  • Aktion erfolgt erst nach erneuter Bestätigung innerhalb von 3 Sekunden.

zu 1: wie kann ich mir das vorstellen?.
Ich kann mit langem Druck die Lautstärke ändern, ob SD oder USB.
zu 2: nächster/vorheriger Track zu jeder Zeit machbar, ob SD oder USB.
zu 3: dieser Punkt ab und an, ich hab aber noch nicht erkannt wann?

1 „Gefällt mir“

Schau dir doch mal den source code an. Da ist das alles drin erläutert.

Hier mal eine Version sowohl für DFPlayer Mini als auch BY8001-16P, es sind fünf (5) Brücken zu setzten.
Wenn man die verschiedenen Library installiert hat, kann man je nach Modul die eine wie auch die andere passende Software flashen.

Variante 1 DFPlayer Mini:

Variante 2 BY8001-16P:

Vielleicht braucht es jemand.

Ich tu mich etwas schwer mit den Quellcode, bin halt nicht der Programmierer.
Vielleicht kannst du mir etwas helfen?
Danke

Wie gesagt, es ist alles im Source Code (auf deutsch) erklärt. Such einfach nach den Kommentaren. Dann sollte eigentlich alles klar sein.

ok, gefunden denke ich.

// Konfiguration Skip Protection
const int MP3_FOLDER_0700_LENGTH = 7000;            // (7 sek) Länge in ms des Tracks 0700.mp3 im MP3 Ordner 
const int SKIP_PROTECTION_CONFIRMATION_TIME = 3000; // (3 sek) Zeit in ms, in der ein weiterer Tastendruck erfolgen muss, damit zum nächsten Track gewechselt wird
const int SKIP_WITHOUT_CONFIRMATION_WINDOW = 300;   // (5 min) Zeitfenster in sek am Anfang eines Tracks in dem ein Wechseln ohne Nachfrage erfolgt

@R0Y4LTS, geht auch mit SD-Karte, werde da auch nach dem 3 Sekunden Tastendruck gefragt.

Also, es ist so gedacht: Wenn man die Lautstärketasten drückt um entweder zum nächsten oder vorherigen Track zu kommen, prüft die Box zunächst, ob der Track mehr als 5 Minuten abgespielt wurde. Sind noch keine 5 Minuten um, springt die Box einfach zum gewünschten Track. Wenn bereits mehr als 5 Minuten vergangen sind, fragt die Box nach, ob wirklich zu einem anderen Track gesprungen werden soll. Mann muss innerhalb von 3 Sekunden noch mal die Lautstärketaste für die entsprechende Richtung betätigen.

Bei Liedern ist es vielleicht irrelevant, aber bei Hörspielen mit vielleicht 40 Minuten meines Erachtens Sinnvoll. Eine gute Balance zwischen schneller Navigiertbarkeit und Schutz vor unbeabsichtigten Trackwechsel. Der Trackwechsel selbst ist natürlich nicht mehr so schlimm mit der Spulen Funktion. Aber das ist quasi die Kür.

Aber jetzt wird’s interessant: Die Frage ist, ob wenn du gefragt wirst, ob du zum nächsten Track wechseln möchtest, der aktuelle Track nach der Frage an der selben Stelle fortgesetzt wird (Spotplay). Nach meiner Erwartungshaltung dürfte das nur mit dem USB-Stick funktionieren (Laut Datenblatt und meinen Tests). Super wäre es natürlich, wenn es auch mit SD-Karte funktionieren würde, da USB ein bisschen mehr Strom zieht.

Aaaahh, du bringst Licht ins dunkel, jetzt versteh ich das auch.
Die Box fragt nur wenn SCHON 5min rum sind, ok.

Zweiten Teil hab ich jetzt auch verstanden, muss ich aber mal mit einem speziellen File testen.
Sage dir bescheid.
Danke paulaner

Für einen Test kannst du natürlich auch einfach die Zeit
SKIP_WITHOUT_CONFIRMATION_WINDOW anpassen, dann klappt es auch mit kürzeren Tracks.

gut zu wissen, danke

Für diesen Test hab ich mir extra 64GB SD Mini Karte zugelegt.
Test: 64GB SD Karte, exFAT formatiert, Inhalt gleich 8GB SD-Karte, wird nur immer der 1. Titel abgespielt.
Fazit, wie auch schon Andere mehrfach bemerkten 32GB dann ist Schicht im Schacht.

Frage an Alle, ich möchte gern in der Konsole bei Play die Laufzeit sehen.
Denke wenn es nicht in der Library ist, einen Timer mit Druck auf die Playtaste starten und im richtigen Zeitformat in der Konsole ausgeben (00:00:00). Aber wie, ich bin halt kein Programmierer.

In einem anderen Sketch habe ich das schon gesehen, das rückwärts die Sekunden gezählt werden.

Hintergrund auch für den Test Teil 2.
Noch kann ich es nicht bestätigen, weder SD noch USB Stick, nichts Spotplay.

Also nach meine Test, mit USB oder SD, kommt die Frage, Fensterzeit auf 45 Sekunden reduziert, ob ich wechseln will, nach einer Bestätigung allerdings spielt er die Tracks immer vom Anfang.

Der folgende Befehl gibt die Laufzeit des aktuellen Tracks in Sekunden wieder. Den könntest du ausgeben: mp3.getBY8X0116P()->getCurrentTrackElapsedTime()

Dass der nächste Track, nachdem man den Wechsel bestätigt hat, von vorne gespielt wird ist das gewollte Verhalten. Es wäre zu ermitteln, ob nach der Frage der Box ohne eine Bestätigung deinerseits, der durch die Frage unterbrochene Track an der unterbrochenen Stelle vorgeführt wird. Das wäre dann der Beweis für Spotplay.

Aha, und das probiere ich.

Sowas ähnliches hab ich auch in dem Beispiel gefunden.

void loop(){
  static word totalTime, elapsedTime, playback;
  
  delay(900);
  
  if (checkFor_mp3IsStopped() == true){
    mp3.nextTrack();
    char* fileName = mp3.getFileNameCurrentTrack();
    Serial.print("\n\nplaying file name: "); Serial.println(fileName);
    totalTime = mp3.getTotalTrackPlaybackTime();
    Serial.print("playback duration: "); Serial.print(totalTime); Serial.println(" seconds");
  }
  elapsedTime = mp3.getElapsedTrackPlaybackTime();
  playback = totalTime - elapsedTime;
  Serial.print(playback); Serial.print(",");
}

Das tut das Modul, es fragt, reagiere ich nicht in den 3 Sekunden, spielt es den Track an der Stelle weiter wo unterbrochen wurde.

Ich höre friedlich weiter, das Lied ist am Ende, da kommt ohne das ich was erneut drücke wieder die Frage, ich mache auch diesesmal nichts und er spielt wieder an der unterbrochene Stelle weiter.

ok, hab ich mal probeweise in den Code ‚gefrimmelt‘.

if (pauseButton.wasReleased()) {
  if (ignorePauseButton == false) {
    if (fastForRewStatus == FFRS_None) {
      if (isPlaying()) {
        mp3.pause(); Serial.println("Pause");
      }
      else
        mp3.start(); Serial.print("Play ");
        Serial.print(mp3.getBY8X0116P()->getCurrentTrackElapsedTime()); Serial.println(" sec");

Nur wenn ich jetzt die Pausetaste drücke erhalte ich eine Zeitanzeige!
Formatiert ist die auch nicht, 00:00:00, sekündlich macht ja wahrscheinlich zu viel ‚Trafic‘. Aber wie kann man es bewerkstelligen das die Zeitanzeige standig z.B. hinter ‚Play‘ steht und sagen wir mal alle 5 Sekunden aktuallisiert wird.

mp3.getBY8X0116P()->getCurrentTrackTotalTime()

Das ist die Gesamtzeit eines Tracks.

Eine neue, nicht endgültige Version der Playtime.

TonUINO+ Version 1.0 BY8001-16P
Timo Schulze

Basierend auf TonUINO Version 2.0
(c) Thorsten Voß
Firmware Version: 0x92 = v2.0

Card UID: A3 40 ED 2D
PICC type: MIFARE 1KB
Authenticating using key A...
Current data in sector:
   1      7   00 00 00 00  00 00 FF 07  80 69 FF FF  FF FF FF FF  [ 0 0 1 ] 
          6   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  [ 0 0 0 ] 
          5   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  [ 0 0 0 ] 
          4   13 37 B3 47  01 09 02 00  00 00 00 00  00 00 00 00  [ 0 0 0 ] 

Reading data from block 4 ...
Data in block 4:
 13 37 B3 47 01 09 02 00 00 00 00 00 00 00 00 00

20 Dateien in Ordner 9
Album Modus -> kompletten Ordner wiedergeben
Albummodus ist aktiv -> nächster Track: 2
Albummodus ist aktiv -> nächster Track: 3
Albummodus ist aktiv -> nächster Track: 4
Albummodus ist aktiv -> nächster Track: 5
Albummodus ist aktiv -> nächster Track: 6
Albummodus ist aktiv -> nächster Track: 7
Albummodus ist aktiv -> nächster Track: 8
Pause: 00:00:02
Total: 00:06:24
Play: 

Der Code

///////////////////////////////////////////////////////////////////////////////////////
  static word elapsedTime, elapsedTime_std, elapsedTime_min, elapsedTime_sec, 
              playback, totalTime_min, totalTime_std, totalTime_sec;

//   totalTime = mp3.getBY8X0116P()->getFolderTrackTotalTime();
   elapsedTime = mp3.getBY8X0116P()->getCurrentTrackElapsedTime();

   elapsedTime_min = elapsedTime / 60;
     if (elapsedTime < 60){
      elapsedTime_sec = elapsedTime;
     }else {
      elapsedTime_sec = elapsedTime % 60;
      elapsedTime_min = elapsedTime / 60;
     }

   elapsedTime_std = elapsedTime_min / 60;

   if (elapsedTime_std < 10){
    Serial.print("0"); Serial.print(elapsedTime_std);  
   }else {
    Serial.print(elapsedTime_std);
   }
    Serial.print(":"); 
   if (elapsedTime_min < 10){
    Serial.print("0"); Serial.print(elapsedTime_min);  
   }else {
    Serial.print(elapsedTime_min);
   }
    Serial.print(":"); 
   if (elapsedTime_sec < 10){
    Serial.print("0"); Serial.println(elapsedTime_sec);  
   }else {
    Serial.println(elapsedTime_sec);
   }
   

   totalTime_sec = mp3.getBY8X0116P()->getCurrentTrackTotalTime();
   totalTime_min = totalTime_sec / 60;
   totalTime_sec = totalTime_sec % 60;
   totalTime_std = totalTime_min / 60;
   Serial.print("Total: ");
   if (totalTime_std < 10){
    Serial.print("0"); Serial.print(totalTime_std); 
   }else {
    Serial.print(totalTime_std);
   }
    Serial.print(":"); 
   if (totalTime_min < 10){
    Serial.print("0"); Serial.print(totalTime_min);
   }else {
    Serial.print(totalTime_min);
   }
    Serial.print(":");
   if (totalTime_sec < 10){
    Serial.print("0"); Serial.println(totalTime_sec);
   }else {
    Serial.println(totalTime_sec);
   }
   Serial.print("");
////////////////////////////////////////////////////////////////////////////////////// 

mit führenden Nullen! geändert 2020/07/25 18:23Uhr

Hallo zusammen,
Ich habe sowohl den DfPlayerMini als auch den BY8001-16p mit 64GB Micro-SD am laufen.
Bei meinem BY8001 funktioniert auch Spot/Insertion-Play mit der SD-Karte.
Allerdings ist das Modul etwas langsamer beim Ausführen von Kommandos, als der DfPlayer.
Manchmal muß man bspw. das Play-Kommando dopoelt senden.
Evtl. liegt es aber nicht nur am Modul, sondern an der verwendeten Bibliothek…

So, mittlerweile sind sowohl DfPlayerMini als auch BY8001-16p erfolgreich mit 128GB Micro-SD Karten am Laufen…

Würdest Du uns auch verraten wie das genau funktioniert? Kann man das in die vorhandene Firmware auch einbauen? Nicht das ich Probleme mit dem Speicherplatz hätte… aber haben ist besser als brauchen :sunglasses:

1 „Gefällt mir“