@kobayashi_maru Kannst du es etwas genauer erklären. Warum geht bei dir nicht io_x.
Basierend auf deinem Tipp hab ich (Anfänger, unterstützt durch ChatGPT) volgenden Code in der TonUINO-TNG hinzugefügt und den Arduino Pin 7 mit IO-1 verbunden:
#include "src/tonuino.hpp"
#include "src/settings.hpp"
#include "src/mp3.hpp"
#include "src/buttons.hpp"
#include "src/logger.hpp"
#include "src/constants.hpp"
#include <avr/wdt.h> // Notwendig für den Software-Reset
/*
_____ _____ _____ _____ _____
|_ _|___ ___| | | | | | |
| | | . | | | |- -| | | | | |
|_| |___|_|_|_____|_____|_|___|_____|
TonUINO Version 3.1 - refactored by Boerge1
created by Thorsten Voß and licensed under GNU/GPL.
Information and contribution at https://tonuino.de.
*/
/*
Please select your TonUINO PCB (Classic, AiO or AiO+) in file constants.hpp
Bitte wählt eure TonUINO-Platine (Classic, AiO oder AiO+) in der Datei constants.hpp
*/
void setup()
{
Serial.begin(115200);
// Verzögerung, um den Start des Hauptprogramms zu verzögern (z.B. 10 Sekunden)
delay(1000);
// Pin 7 für IO1 des DFPlayer Mini als Ausgang festlegen
pinMode(7, OUTPUT);
// Kurzes Signal auf IO1 des DFPlayer Mini
digitalWrite(7, LOW); // IO1 auf LOW setzen (oder HIGH je nach Anforderung)
delay(100); // 100ms Signal (Dauer anpassen je nach Bedarf)
digitalWrite(7, HIGH); // IO1 wieder auf HIGH setzen
// Verzögerung, um den Start des Hauptprogramms zu verzögern (z.B. 10 Sekunden)
delay(1000); // 1 Sekunde warten, bevor das Programm startet
// Dieser Hinweis darf nicht entfernt werden
LOG(init_log, s_error, F("\n _____ _____ _____ _____ _____"));
LOG(init_log, s_error, F("|_ _|___ ___| | | | | | |"));
LOG(init_log, s_error, F(" | | | . | | | |- -| | | | | |"));
LOG(init_log, s_error, F(" |_| |___|_|_|_____|_____|_|___|_____|"));
LOG(init_log, s_error, F("TonUINO Version 3.1 - refactored by Boerge1\n"));
LOG(init_log, s_error, F("created by Thorsten Voß and licensed under GNU/GPL."));
LOG(init_log, s_error, F("Information and contribution at https://tonuino.de.\n"));
LOG(init_log, s_error, F("V3.1.12 22.08.24\n"));
Das ganze hab ich mit 4 unterschiedlichen DFPlayern getestet (alle TD5580A, vmtl gleiche Charge).
Player Nr 1 und 2 hatte ich schon mit „manuellem“ work-around zum Laufen gebracht, Nr 1 und 2 laufen mit obigem Code absolut stabil.
Nach dem Code-Upload muss ich den Arduino jedoch immer erst 1x vom Strom trennen.
Wenn ich die Start-Verzögerung niedriger setze, (zb 500ms), dann bekomme ich oft keine Antwort mehr vom DFPlayer (nur noch „out“, keine „in“, ich dachte dieses Fehlerbild wäre ein Zeichen von Wackelkontakt, aber bei mir hängt das wohl recht reproduzierbar mit der Startverzögerung zusammen).
Das Signal auf IO-1 hätte ich gerne auf >=1000ms gestellt (damit der DFplayer nicht bei jedem Start Track 160 in Default-Lautstärke abspielt - etwas nervig - sondern das Signal als Lautstärke-Ändern erhält, dann antwortet der DFplayer idR jedoch auch nicht mehr.
Dann wollte ich diesen Code auch bei meinem DFPlayer Nr 3 testen => jedoch keine Antwort.
Zum Testen habe ich dann DFPlayer Nr 3 separat angeschlossen, ohne Arduino, und IO-1 angesteuert. Das hat geklappt. Wie ich ihn dann wieder an den Arduino gehängt habe, hat er auf einmal auch mit obigem Start-Verzögerungs-code stabil funktioniert (musste er erst aus dem Dornröschenschlaf geweckt werden?)
Mein DFPlayer Nr 4 hat nach dem Auspacken zunächst auch nicht funktioniert, trotz Start-Verzögerungs-Code. Anstatt ihn erst manuell zu testen (wie Nr 3) hab ich hier die Delay-Zeit beim Startvorgang zunächst auf 2000ms gesetzt. Nach dem Arduino-Update kurz vom Strom getrennt und wieder angeschlossen, und dann hat er auf einmal auch reagiert.
Dann hab ich die Delay-Zeiten wieder auf 1000ms gesenkt, und jetzt funktioniert er auch mit „lediglich“ 1000ms Verögerung stabil.
Wie weit man die Startverzögerung genau verringern kann, ohne dass es zu Problemen kommt, habe ich nicht genauer getestet.
Vllt hilft obiges aber dem ein oder anderen (oder ein Experte weiss, was ich noch weiter optimieren könnte)
Weiterhin hab ich jedoch das Problem, dass nur die ersten 2 Tracks eines Ordners erkannt / gespielt werden. Wenn jmd dafür noch einen Tipp hat, dann kann ich meine TD5580A doch behalten…
Kann ich nur vermuten.
Ich hatte versucht mit Drahtbrücke von IO_ zu GND manuell die Ansage auszulösen und dann den reset am Arduino loszulassen, aber vielleicht bin ich zu grob motorisch und habe nie den richtigen Zeitpunkt abgepasst, so dass ich diese Lösung nicht nachstellen konnte.
Dann habe ich versucht, den „shortpress“ am IO_ über den Pin am Arduino in die setup-Routine zu packen und mit Umschalten zwischen LOW und HIGH Pegel auszulösen. Auch das ohne Erfolg. Per Multimeter habe ich herausgefunden, dass der Pin an meinem Arduino bevor er im setup auf LOW oder HIGH gesetzt wird, am IO_ quasi schon LOW auslöst (weiß nicht, wie ich es besser beschreiben soll) und der IO_ somit eher einen longpress bekommt.
longpress am ADKEY_ löst aber (wie shortpress am IO_) ein Abspielen aus, also Arduino-Pin mit ADKEY_ verbunden und am Anfang vom setup LOW gesetzt und nach dem mp3.begin auf HIGH und der Player lässt sich nach dem Startvorgang im TONUino ansteuern.
Und ich dachte der Workaround mit IO_x auf Gnd behebt gerade das Problem, das die Anzahl der Tracks immer mit 2 zurückgeben wird?
Nein, der IO_1 workaround behebt (zumindest bei mir, soweit ich verstanden habe auch bei @Georg47k ) das Problem dass der DFPlayer entweder schon beim Starten nicht antwortet, oder zumindest beim Starten zwar noch antwortet, aber dann keinerlei Tracks abspielt („missing OnPlayFinished“)
Exakt…
Das hab ich dann leider missverständlich formuliert: „Das mit dem IO_1 Pin“ ist der Workaround um den TD5580 Player mit der Tonuiono Software zum laufen zu bekommen (das 2 Dateien pro Ordner Problem bleibt).
Manuell per RS232 gesteuert geht der Player immer.
Leider kann man sich selten aussuchen welchen Chip auf dem Player man bekommt, das ist eher Zufall.
Letzte Woche habe ich eine Antwort von ebay Verkäufer „roboter-bausatz“ bekommen
„Hallo,
ich habe den Artikel am Lagerfach überprüft. Also auf der Platine steht: DFPlayer Mini HW-247A. Auf dem Chip steht: GD3200D 231111E56A.“
→ die sollten also gehen. Bei mir angekommen sind die aber noch nicht.
Ok, dann habe ich das missverstanden. Der Player ist damit meiner Meinung nach unbrauchbar.
GD3200D läuft zwar ist aber auch nicht ideal. Im Moment wären die JL Player die besten.
Das ist nicht ganz das, was ich meinte. Sondern eher etwas in die Richtung: beim Programmieren der RFID wird nach dem abzuspielender Ordner die Anzahl der darin befindlichen Dateien abgefragt und als z.B. Parameter special_3 auf die RFID geschrieben. Beim Auslesen der Karte wird dann dieser Parameter als numTracksInFolder übergeben und ab da arbeitet dann das Abspielen wie vorher.
Wie gesagt, nicht wirklich nur moderate Anpassungen, so dass ich @Boerge1 zustimme, dass dieser Player nicht nutzbar ist.
Aber ich kann bestätigen, dass eine mit dem Album-von-bis-Modus programmierte Karte anstandslos mit dem Player funktioniert. Allerdings musste ich die Karte auf einem anderen TONUino programmieren, da ich ja sonst nur die Tracks 1 und 2 hätte auswählen können.
Das einzige was die Software ermöglichen müsste ist es beim Programmieren des von-bis Modus auch zu Tracks zu klicken die hinter dem letzten Track liegen, bzw. das was die die Software für den letzten Track hält wenn der TD5580 Chip die falsche Anzahl zurückmeldet. Dann hätte man zumindest einen Workaround für diesen Player.
Hallo Leute
Ich verfolge die Beiträge zu diesem Player schon von Anfang an. Ich denke, und da schließe ich mich der Meinung von @Boerge1 voll an, dass man diesen Player auf die Liste der unbrauchbaren setzen sollte. Der ganze Aufwand um dem Teil wenigstens einen Bruchteil der vollen Funktionalität zu entlocken lohnt sich meiner Meinung nicht, zumal es ja immernoch genügend Alternativen gibt.
Der Meinung bin ich auch.
Nur hier wird es etwas blöd, denn es gibt zwar genug laufende Player, aber wenn man schon 3 hat und dann noch einen kaufen soll, der wieder nicht geht…
Man kann halt nicht beeinflussen, was der Postbote bringt
Meine Idee war, die Anzahl der Tracks eines Musik-Ordner separat in einer txt.Datei zu speichern, und diesen Wert dann beim Anlernen einer neuen RFID Karte zu übergeben. Das scheitert bisher allerdings daran, dass der Sketch zu gross wird und nicht mehr hochgeladen werden kann.
Übergangsweise hab ich jetzt einfach (hardcoded) die Variable für die Anzahl der Tracks in einem Ordner auf den Wert 20 gesetzt, dh jede meiner angelernten RFID Karten erwartet 20Tracks in einem Ordner. Ich hab pro Ordner weniger als 20 Tracks, das ist aber kein grosses Problem, wenn meine kleinen Hörer Musik im Album-Modus anhören, dann probiert der Player nach dem letzten Track einfach noch die weiteren (nicht vorhandenen) Tracks bis Nr 20 zu spielen und gibt in der Console Fehlermeldungen für jeden nicht gefundenen Track. Das ist beim Hören aber nicht weiter störend, der Player bleibt nach dem letzten Track eines Albums einfach stumm, bis eine neue Karte / die Karte erneut aufgelegt wird.
Das sollte für unsere bisherigen Bedürfnisse völlig ausreichend sein.
Aber falls jmd eine elegantere Lösung findet, sehr gerne…
Da könnte man ev. ansetzen, dass man speziell für diesen Player die Variable TracksinFolder generell auf 255 setzt. Wenn dann der Player an den ersten nicht vorhandenen Track kommt, (error6) kann die Software die Wiedergabe einfach beenden.