Bussy-Pin überprüfen ist bisher so die häufigste Ursache wenn Play/Pause und nächster Track nicht richtig funktionieren.
Hey. Guter Tipp. Aber das kann eigentlich nicht sein, weil ich ja über den PIN auch die LED Animation trigger. Die funktioniert ja soweit. Sobald nichts gespielt wird, kommt auch keine Animation.
Ich denke eher ich habe einen Fehler im Code.
Ziemlich cool.
Also ist der Code quasi original + den LED Ring?
@barni ja kann man so sagen. Am besten einfach vergleichen.
Ich habe jetzt aber festgestellt, dass durch die LED Ansteueuerung der Arduino nicht mehr zuverlässig nach Beendigung eines Tracks, den nächsten abspielt. Das betrifft also nicht nur den Partymodus. An der SD Karte liegt es nicht. Mit der originalen Firmware ohne den LED Teil gibt es das Problem nicht.
@Thorsten vielleicht könntest du, wenn du die Zeit findest einmal über den Code schauen?
Das Problem ist: Es wird nach Beendigung nicht zuverlässig der nächste Track abgespielt. Mal klappt es, mal nicht. Getestete habe ich es mit 20 Tracks die einfach sehr kurz sind. Z.B. die aus dem mp3 Ordner.
Irgendwas lässt durch den LED Teil beim Abspielen den Arduino quasi hängen… Der Track ist beendet, die Animation bleibt hängen und es geht nicht weiter. Man kann dann zwar das Gerät bedienen, also Pause, lauter/leiser oder auch die Karte wieder neu auflegen, aber das ist ja nicht Sinn der Sache.
zu spät. Kram ist bestellt. Bin angefixt
Vielleicht finden wir ja dann den Fehler oder einen Workarround
@barni finde ich gut. Dann habe ich ja an der Stelle einen Mitstreiter.
Vielleicht liegt es auch wirklich nur an der Library und wenn man eine andere nutzt, hat man das Problem nicht mehr. Ich bin mal gespannt, ob oder was du herausfindest. Ich warte jetzt auch noch auf zusätzliche Hardware. (Je 2 Arduino nano und 2 DfPlayer mini. Kartenleser habe ich noch )
ok, erwarte aber nicht zu viel
Mein Ring ist just angekommen! @Rene Gibts schon was neues?
Leider nein. Aktuell komme ich nicht dazu.
Meiner ist auch angekommen. Allerdings nur einer mit 12 LEDs.
Hab nicht so drauf geachtet. (in deinem Sketch sind ja 24 referenziert.)
Ist ja schon süß klein.
Wieso braucht man eigentlich beide libraries? Also fastled und die von adafruit?
Braucht man nicht. Das ist entweder oder.
Richtig. Ich wollte ursprünglich die Library von Ardafruit nutzen. Damit reagiert der Arduino aber nicht wirklich auf Eingaben. Daher nur für die Startanimation genutzt.
Beide Libraries fressen aber Speicher. Und auch nur mit fastled kann man Probleme haben. Das hat mit den interrupts (bzw dessen deaktivierung) usw zu tun und das machen beide, weil sie ein sehr enges timing (800khz) einhalten müssen um die LEDs zu programmieren.
Ggf würde es helfen die Ansteuerung der LEDs in einen separaten Thread zu packen.
Packt ihr einen Diffusor vor die LEDs? Ich plane eher in Richtung LED Streifen mit 8LEDs, wäre dann mehr ein Lauflicht.
Wenn man ein RTOS hat, kann man das tun, ich glaube aber ein “echter” Arduino hat kein RTOS und damit auch keinen Threads.
Ich habe da einen Ring drüber. Aus dem 3D Drucker. PLA in weiß. Also eine Art Diffusor. Sonst sieht es ja auch nicht so schön aus.
So wie der Code aktuell ist, hat man bei Eingaben ja keine Probleme. Nur das zuverlässige nach und nach abspielen hakt ab und an. Also hängt dann fest, sobald ein Track vorbei ist.
An welcher Stelle im Code bekommt denn der Player einen Befehl für den nächsten Track? Vielleicht muss ich da mal suchen.
Über mp3.loop() in der Hauptschleife und dann
static void OnPlayFinished(uint16_t track) {
Serial.print("Track beendet");
Serial.println(track);
delay(100);
nextTrack(track);
}
Ich habe mir das Ganze nochmal angesehen und viel ausprobiert. Leider ohne irgendeine Lösung zu finden.
Hat hier noch jemand eine Idee?
Was ich einfach nicht verstehe: wieso bleibt er nur manchmal hängen und spielt nicht von alleine den nächsten Track ab? Er müsste ja die Schleife immer wieder durchlaufen. Er reagiert ja dann an dieser Stelle trotzdem noch auf Eingaben.
Ich tippe darauf das die Dauer eines Aufrufs der Animation das Problem ist.
Diese wird so lange dauern, das ein Teil der Rückmeldung vom Player verloren geht.