Fragen zum DFPlayer mini (Lexikon)

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Neu

      Wie bekommt man den Nachweis, dass ein MP3_setVolume() angekommen und verarbeitet ist? (Wenn man jetzt nicht ein einfaches waitms xx einbauen will)
      Kann man in einer Schleife MP3_getVolume() fragen, oder stört das das Modul
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Neu

      Es gibt im Befehlsstring noch ein Steuerbyte namens Feedback.
      Eventuell gibt es da eine Antwort.
      IMHO kommt da der gesendete Befehlsstring zurück wenn ich mich da richtig erinnere.
      Das war ganz am Anfang wo ich damit experimentiert hatte, daher ist das nur eine Vermutung.
      Wenn es damit geht, musst du das in der Lib entsprechend anpassen.

      Wenn das wirklich tut, habe ich noch ein Feature für das in Arbeit befindliche Testprogramm :D

      Und du kannst dem Modul soviel Befehle senden wie du willst, das abspielen wird nicht gestört, du musst nur beachten, dass während dem senden vom Modul nichts angenommen wird.
    • Neu

      Mir ist jetzt noch nicht ganz klar, wie ich feststellen kann, wann das Modul nach dem 'Wieder mit Strom versorgt sein' für Befehle empfänglich ist. Vor dem Ausschalten Volume runter setzen, nach dem Einschalten Volume wieder hoch und nachfragen, wann das zurück gemeldet wird? Aber dazu muss das Modul ja schon den Befehl setVolume verarbeiten.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Neu

      MP3_GetStatus
      Gibt den aktuellen Status zurück
      Rückgabe: 10=USB-Flash ist gestoppt, 11=USB-Flash ist im Abspielmodus, 12=USB-Flash ist im Pausenmodus,
      20=SD-Card ist gestoppt, 21=SD-Card ist im Abspielmodus, 22=SD-Card ist im Pausenmodus,
      30=Modul ist im Sleep-Modus.

      Also Mp3_wakeup() und dann in einer Schleife fragen, wann Mp3_getstatus() nicht mehr 30 ist?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Neu

      Nein der ist es nicht.

      Jetzt habe ich mal am großen Rechner nachgesehen, da habe ich die Datenblätter ;) .
      Man bekommt diese Infos als Antworten nach dem Absetzen eines Befehls, das Problem ist aber, dass in dieser LIB-Version von mir darauf nicht eingegangen wurde.
      Ich werde das aber jebenfalls überdenken und auch die Fehlerbehandlung einarbeiten.

      Nichts desto trotz, müssten diese Antworten aber dennoch gesendet werden, du musst diese halt vorläufig selbst verarbeiten.

      Wie du in der Beilage erkennen kannst, ist das Modul ja sehr gesprächig (ich habe mal einen unübersetzten Datenblattauszug beigefügt) :D

      Fehlerbehandlungen schrieb:

      3.5.3 Returned data of feedback from module
      Module returns ACK 7E FF 06 41 00 00 00 xx xx EF
      1). In order to enhance stability between data communication, the function of a feedback from module is added.
      Once there is a feedback to MCU from the module, it means the module has successfully received the command
      that MCU sent out. 0x41 is the returned command by module.
      2). Users are free to choose this feedback or not. It’s also fine not to choose this function.

      3.5.4 Returned data of errors
      Returned Data of Errors Meaning Description
      7E FF 06 40 00 00 01 xx xx EF Module busy(this info is returned when the initialization is not done)
      7E FF 06 40 00 00 02 xx xx EF Currently sleep mode(supports only specified device in sleep mode)
      7E FF 06 40 00 00 03 xx xx EF Serial receiving error(a frame has not been received completely yet)
      7E FF 06 40 00 00 04 xx xx EF Checksum incorrect
      7E FF 06 40 00 00 05 xx xx EF Specified track is out of current track scope
      7E FF 06 40 00 00 06 xx xx EF Specified track is not found
      7E FF 06 40 00 00 07 xx xx EF Inter-cut error(a inter-cut operation only can be done when a track is being played)
      7E FF 06 40 00 00 08 xx xx EF SD card reading failed(SD card pulled out or damaged)
    • Neu

      In diesem Zusammenhang mal eine Frage meinerseits.

      Was wäre besser?
      1. Die bestehenden Subs und Funktionen mit der Fehlerbehandlung aufrüsten (dies würde aber bedeuten, dass alle Subs in Funktionen umgewandelt werden müssen und eventuell bestehende Programme jedenfalls angepasst werde müssten.
      2. Die bestehenden Subs und Funktionen derart Ändern, dass eine globale Variable MP3_Error mit einem entsprechenden Wert belegt wird, der dann gesondert abgefragt werden kann.
      3. Eine neue Funktion MP3_Error() hinzufügen, die man nach jeder gewünschten Sub oder Funktion zusätzlich aufruft und ein entsprechendes Ergebnis entsprechend dem Datenblattauszug oben zurück gibt.Dies hätte den Vorteil, dass bestehende Programme nicht verändert werden müssten aber neue Programme davon profitieren könnten.
      Gegen 1 und 2 spricht meiner Meinung der Umstand, dass diese Fehlerbehandlung ja auch Zeit braucht (man muss jedenfalls auf dieses Telegramm warten) und so einen möglichen kontinuierlichen Ablauf auch stören wird.

      BTW, weil ich dazu nichts gefunden habe, gibt es eine Möglichkeit Funktionen die an sich Parameter erwarten auch ohne diese aufzurufen und die Funktion nimmt dann wenn keine Parameter übergeben werden, dafür Defaultwerte die man in der Funktion entsprechend definieren kann (das kenne ich so von anderen Hochsprachen)?
    • Neu

      Zitronenfalter schrieb:

      In diesem Zusammenhang mal eine Frage meinerseits.

      Was wäre besser?
      1. Die bestehenden Subs und Funktionen mit der Fehlerbehandlung aufrüsten (dies würde aber bedeuten, dass alle Subs in Funktionen umgewandelt werden müssen und eventuell bestehende Programme jedenfalls angepasst werde müssten.
      2. Die bestehenden Subs und Funktionen derart Ändern, dass eine globale Variable MP3_Error mit einem entsprechenden Wert belegt wird, der dann gesondert abgefragt werden kann.
      3. Eine neue Funktion MP3_Error() hinzufügen, die man nach jeder gewünschten Sub oder Funktion zusätzlich aufruft und ein entsprechendes Ergebnis entsprechend dem Datenblattauszug oben zurück gibt.Dies hätte den Vorteil, dass bestehende Programme nicht verändert werden müssten aber neue Programme davon profitieren könnten.
      Gegen 1 und 2 spricht meiner Meinung der Umstand, dass diese Fehlerbehandlung ja auch Zeit braucht (man muss jedenfalls auf dieses Telegramm warten) und so einen möglichen kontinuierlichen Ablauf auch stören wird.

      BTW, weil ich dazu nichts gefunden habe, gibt es eine Möglichkeit Funktionen die an sich Parameter erwarten auch ohne diese aufzurufen und die Funktion nimmt dann wenn keine Parameter übergeben werden, dafür Defaultwerte die man in der Funktion entsprechend definieren kann (das kenne ich so von anderen Hochsprachen)?
      Punkt 3 wäre mir am liebsten. Mein Wunsch ist ja, möglichst zügig mit dem Modul zu kommunizieren, also keine waits zu verwenden. Man kann ja schlecht abschätzen, was das Modul alles nach einen Befehl machen muss und welche Zeit es braucht.

      Zu deiner letzten Frage, es wird der compiler schon meckern, wenn zuwenig Parameter übergeben werden. Vielleicht kann man den Wert 255 nehmen und den dann mit default überschreiben.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Neu

      tschoeatsch schrieb:

      Mein Wunsch ist ja, möglichst zügig mit dem Modul zu kommunizieren, also keine waits zu verwenden. Man kann ja schlecht abschätzen, was das Modul alles nach einen Befehl machen muss und welche Zeit es braucht.
      Als konkretes Beispiel mal 'Babette, der Küchentimer'. Dieses Programm hat u.a. 2 Schleifen, in der einen bewegt es sich in der Zeit vor dem countdown. Hier können die Zeiten eingestellt werden und auf Knopfdruck ein Witz erzählt werden lassen. Bei fehlender Aktivität vom user wird nach einer relativ kurzen Zeit in powerdown geschalten. In dieser Schleife lohnt sich es wahrscheinlich nicht, den player abzuschalten. In der anderen Schleife befindet sich das Programm während des countdowns. Die läuft, bis der countdown abgelaufen ist, also schon mal länger. Hier soll aber auch auf Knopfdrücke reagiert werden und auch automatisch ein Witz erzählt werden. Da wäre es gut, den player dazwischen zum Stromsparen zu bringen, ihn aber bei Befarf möglichst schnell wieder zur Ausgabe zu bewegen. Wenn da nach dem Knopfdruck 2 Sekunden erstmal nix passiert, wäre das natürlich nicht so toll.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Neu

      tschoeatsch schrieb:

      Wenn da nach dem Knopfdruck 2 Sekunden erstmal nix passiert, wäre das natürlich nicht so toll.
      Ich sehe da das Problem, dass der Player nach abschalten und Wiederkehr der Stromversorgung zuerst mal den Speicher initialisieren möchte. Und nur das wird je nach Speichergröße auch verschieden Zeit brauchen, das Modul selbst wird sicher schlagartig bereit sein, der Speicher halt nicht.

      Was ich noch nicht weiß, ist ob man das Modul wirklich schlafen schicken (und das Modul merkt sich dann die "Speicherparameter") und vor allem auch wieder aufwecken kann.
      Ich meine mal irgend wo gelesen zu haben, dass der Wakeup-Befehl (soll wohl der 0x0B sein der im Datenblatt aber nicht definiert ist) aber nicht bei allen Modulen funktionieren soll.
      Andererseits habe ich aber auch gelesen, dass das Aufwecken mit dem SetSource-Befehl 0x09 funktionieren soll).
    • Neu

      Aus dem powerdown aufwachen, wo das Modul von der Stromversorgung getrennt ist, geht schon ganz gut und auch hinreichend schnell. Ich hab' da waits drin, die man evtl. noch durch Nachfragen weg bekommt. Interessant wäre eben der sleep-Modus. Ich werde da mal in die Richtung experimentieren...
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------