LED-Verbesserungen / Rework

Ist der Webserver noch verfügbar?
Hast du ein Log in diesem Fall (entweder aus dem Webserver oder aus dem Terminal)?
Ich kann das bei mir mit dem neusten Stand beliebig oft hin und her schalten…

Ich habe gerade festgestellt das der Fehler auch schon bei vorigen Versionen da war.
Das war mir nicht aufgefallen, ich bin gerade etwas ratlos, gebe Bescheid.

Hallo @compactflash,
das sieht ganz nach mutex aus. Nachdem einmal zwei Tasks gleichzeitig in einem „kritischen Abschnitt“ waren, habe ich diese mit Semaphore abgesichert. Dann gibt es noch die „rekursive“ Variante, wo die Semaphore beim Betreten eines weiteren gesicherten Abschnitts noch nicht zurückgegeben wurde. Vielleicht ist das der Fall. In meiner Radioapplikation hat das immer funktioniert, aber…
Ich habe da was gefunden,was eventuell die Ursache sein könnte. Probiere mal bitte mit der neuen Version, ob der Fehler noch besteht. Ich drücke die Daumen :smiley:

1 „Gefällt mir“

Guten Morgen @Wolle

Ich habe nichts verstanden… aber deine Nachtschicht hat sich gelohnt . Es funktioniert , vielen Dank.
Wieso hat das kein anderer?
Kann das mal jemand für Dummies erklären.

@Joe91 Vielleicht bin ich auch wieder der Einzige, bei mir sind am 24er-Neopixel bei Pause und Idle nur 5 statt 6 Leds an.

@compactflash
Lässt sich in den settings.h einstellen wie viele Idle-LEDs verwendet werden sollen. Bei 24 empfiehlt sich vier oder sechs…
Auf dem master sollten es eigentlich vier sein:

Hat sich erledigt. Habe hier eine gute Erklärung gefunden. Zumindest habe ich das Prinzip verstanden.

Da war 5 eingetragen und ist mittlerweile von Torsten korrigiert. Ich habe den neuen Bereich gestern völlig ignoriert, weil ich den Stress mit der Audio.lib hatte.

1 „Gefällt mir“

Ich habe nach langer Zeit mal wieder die Quellen aktualisiert. Bei deaktiviertem Neopixel (ich nutze selbst (bisher) keinen) kommt es beim Kompilieren der Led.cpp zu folgenden Fehlermeldungen:

src/Led.cpp:195:1: error: ‚CRGB‘ does not name a type
CRGB Led_DimColor(CRGB color, uint8_t brightness) {
^
src/Led.cpp:200:23: error: variable or field ‚Led_DrawIdleDots‘ declared void
void Led_DrawIdleDots(CRGB* leds, uint8_t offset, CRGB::HTMLColorCode color) {
^
src/Led.cpp:200:23: error: ‚CRGB‘ was not declared in this scope
src/Led.cpp:200:29: error: ‚leds‘ was not declared in this scope
void Led_DrawIdleDots(CRGB* leds, uint8_t offset, CRGB::HTMLColorCode color) {
^
src/Led.cpp:200:43: error: expected primary-expression before ‚offset‘
void Led_DrawIdleDots(CRGB* leds, uint8_t offset, CRGB::HTMLColorCode color) {
^
src/Led.cpp:200:51: error: ‚CRGB‘ has not been declared
void Led_DrawIdleDots(CRGB* leds, uint8_t offset, CRGB::HTMLColorCode color) {

Als Quick+Dirty-Lösung habe ich die folgenden drei Zeilen oberhalb des „#ifdef NEOPIXEL_ENABLE“-Zweigs eingebaut - vermutlich geht das aber auch eleganter (mit weiteren #ifdefs?)…

#include <FastLED.h>
constexpr uint8_t Led_IdleDotDistance = NUM_LEDS / NUM_LEDS_IDLE_DOTS;
extern t_button gButtons[7]; // next + prev + pplay + rotEnc + button4 + button5 + dummy-button

Oh, sorry. Den Fall habe ich komplett übersehen. Werde das näher anschauen und einen fix erstellen. Vielen Dank für den Hinweis!

Hab’s schon gefixt.
Habe ich auch übersehen.

Habe ein paar Formatierungen angepasst und Kram komplett rausgeworfen, wenn kein Neopixel gebraucht wird. Ansonsten gab’s bisschen noch Code, der offenbar nicht mehr benutzt wurde.

1 „Gefällt mir“

Danke für die schnelle Korrektur!

Bei mir ist auch ein Problem aufgetaucht. Kurz zur Erläuterung der Situation:
Wir haben eine Karte die alle Titel in einem zufälligen Unterverzeichnis abspielt. Damit wir wissen, welches Album (bzw. welcher Ordner) gespielt wird, haben wir einen Track vorangestellt, bei dem der Albumname vorgelesen wird. Bisher lief es so, dass dieser Track abgespielt wurde und anschließend alle Tracks die im Album enthalten sind.

Seit dem Update spielt er den kurzen Track, der den Albumnamen vorliest problemlos. Spielt dann den ersten Ton vom nächsten Track und stürzt ab und rebootet.

[ 24799 ]  RFID-Karte erkannt: (ISO-14443) ID: 8b-8f-cf-bd
[ 24801 ]  RFID-Karte empfangen: 139143207189
[ 24813 ]  Versuche ein zufälliges Unterzeichnis zu finden aus: /Kalle Klang u. die Floht�ne
[ 24837 ]  Zufällig ausgewähltes Unterverzeichnis: /Kalle Klang u. die Floht�ne/Sing mit mir Kinderlieder 3
[ 24863 ]  Playlist-Generierung: cached
[ 24914 ]  Freier Speicher: 81332
[ 24915 ]  Anzahl gültiger Files/Webstreams: 28
[ 24915 ]  Modus: Spiele alle Tracks (alphabetisch sortiert) des Ordners '/Kalle Klang u. die Floht�ne/Sing mit mir Kinderlieder 3'
[ 24930 ]  Neue Playlist empfangen mit 28 Titel(n)
[ 24930 ]  Free heap: : 82228
[ 24987 ]  info        : PSRAM found, inputBufferSize: 283615 bytes
[ 25059 ]  info        : buffers freed, free Heap: 82064 bytes
[ 25059 ]  info        : Reading file: "/Kalle Klang u. die Floht�ne/Sing mit mir Kinderlieder 3/00 - Albumname rot.mp3"
[ 25092 ]  info        : MP3Decoder has been initialized, free Heap: 58372 bytes
[ 25098 ]  '/Kalle Klang u. die Floht�ne/Sing mit mir Kinderlieder 3/00 - Albumname rot.mp3' wird abgespielt (1 von 28)
[ 25106 ]  info        : Content-Length: 17591
[ 25106 ]  info        : ID3 framesSize: 1034
[ 25107 ]  info        : ID3 version: 2.4
[ 25114 ]  info        : ID3 normal frames
[ 25164 ]  info        : Audio-Length: 16557
[ 25168 ]  info        : stream ready
[ 25168 ]  info        : syncword found at pos 0
[ 25172 ]  info        : Channels: 1
[ 25173 ]  info        : SampleRate: 22050
[ 25173 ]  info        : BitsPerSample: 16
[ 25176 ]  info        : BitRate: 40000
[ 25188 ]  info        : VBR recognized, audioFileDuration is estimated
[ 28076 ]  info        : Closing audio file
[ 28077 ]  info        : End of file "/Kalle Klang u. die Floht�ne/Sing mit mir Kinderlieder 3/00 - Albumname rot.mp3"[ 28079 ]  eof_mp3     : /Kalle Klang u. die Floht�ne/Sing mit mir Kinderlieder 3/00 - Albumname rot.mp3
[ 28447 ]  info        : buffers freed, free Heap: 82064 bytes
[ 28447 ]  info        : Reading file: "/Kalle Klang u. die Floht�ne/Sing mit mir Kinderlieder 3/01 - Das ist gerade, 
das ist schief.mp3"
[ 28470 ]  info        : MP3Decoder has been initialized, free Heap: 58348 bytes
[ 28478 ]  '/Kalle Klang u. die Floht�ne/Sing mit mir Kinderlieder 3/01 - Das ist gerade, das ist schief.mp3' wird abgespielt (2 von 28)
[ 28486 ]  info        : Content-Length: 2389521
[ 28486 ]  info        : ID3 framesSize: 146577
[ 28487 ]  info        : ID3 version: 2.3
[ 28494 ]  info        : ID3 normal frames
[ 28573 ]  id3data     : Album: Sing mit mir Kinderlieder 3
[ 28585 ]  id3data     : Artist: Kalle Klang & Die Flohtöne
[ 28598 ]  id3data     : Band: Kalle Klang & Die Flohtöne
[ 28610 ]  id3data     : PartOfSet: 1
[ 28622 ]  id3data     : Title: Das ist gerade, das ist schief
[ 28637 ]  id3data     : Track: 01
[ 28648 ]  id3data     : Year: 2017
[ 29800 ]  info        : Audio-Length: 2242944
[ 29806 ]  info        : stream ready
[ 29806 ]  info        : syncword found at pos 0
[ 29812 ]  info        : Channels: 1
[ 29812 ]  info        : SampleRate: 48000
[ 29812 ]  info        : BitsPerSample: 16
[ 29814 ]  info        : BitRate: 128000
Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x400d3578  PS      : 0x00060d30  A0      : 0x800d6daf  A1      : 0x3ffdb7d0
A2      : 0x3ffc4c60  A3      : 0x0000000f  A4      : 0x3ffc4f40  A5      : 0x000000ff  
A6      : 0xff0000ff  A7      : 0x00ff0000  A8      : 0x800d35e3  A9      : 0x0000ff00
A10     : 0x0000000f  A11     : 0x3ffc4f4c  A12     : 0x3ffc4f4f  A13     : 0x3ffc4f26  
A14     : 0x00000063  A15     : 0x00000002  SAR     : 0x00000020  EXCCAUSE: 0x0000001c
EXCVADDR: 0xff000103  LBEG    : 0x400955be  LEND    : 0x400955c9  LCOUNT  : 0x00000000  

ELF file SHA256: 0000000000000000

Backtrace: 0x400d3578:0x3ffdb7d0 0x400d6dac:0x3ffdb810 0x400d798d:0x3ffdb830 0x40099402:0x3ffdb880
  #0  0x400d3578:0x3ffdb7d0 in CLEDController::showLeds(unsigned char) at .pio/libdeps/lolin_d32_pro_sdmmc_pe/FastLED/src/FastLED.cpp:269
      (inlined by) CFastLED::show(unsigned char) at .pio/libdeps/lolin_d32_pro_sdmmc_pe/FastLED/src/FastLED.cpp:59    
  #1  0x400d6dac:0x3ffdb810 in CFastLED::show() at .pio/libdeps/lolin_d32_pro_sdmmc_pe/FastLED/src/controller.h:171   
  #2  0x400d798d:0x3ffdb830 in Led_Task(void*) at .pio/libdeps/lolin_d32_pro_sdmmc_pe/FastLED/src/controller.h:171    
  #3  0x40099402:0x3ffdb880 in vPortTaskWrapper at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/port.c:355 (discriminator 1)

Rebooting...
  • Alle anderen Alben lassen sich problemlos abspielen.
  • Die einzelnen Tracks können ohne Probleme wiedergegeben werden.
  • Auch beim Auswählen der problematischen Alben in der Weboberfläche tritt das selbe Problem auf.

PS Ich bin wohl nicht der Einzige mit dem Problem: siehe hier

Bei mir kommt es zum gleichen Verhalten nur bei normalen Titeln. Interesanter weise auch nicht bei allen. Bei den betroffenen jedoch reproduzierbar auf allen ESPuinos.

Tut mir Leid, diesen Fall hatte ich total übersehen. Habe einen Fix erstellt der sicher bald im master sein wird:

Ist bereits drin und funktioniert aus meiner Sicht :+1:
Habe noch zwei angefügt.

Was mir glaube ich helfen würde, ist eine Kurzbeschreibung der Task-Variablen. Also sowas wie animationTimer, animationIndex, subAnimationIndex, staticLastBarLenghtPlaylist, staticLastTrack, staticBatteryLevel. Auch das Setzen des (sub)AnimationIndex auf irgendwelche Zahlen und warum es ausgerechnet einen Case 42 gibt :thinking:.

Sollten wir eigentlich Schimpfwörter in den Code aufnehmen?

:rofl:

Hi Torsten,
ja, das kann ich gerne machen. Am besten dokumentiere ich das im Code. Oder soll ich es hier im Post 1 zunächst erklären?
Ich kann ja beispielhaft mal den Code aus einer Animation in eine separate Funktion schieben (dafür müssten wir aber vermutlich ein paar Variablen der LED.cpp als member verwenden.
Statt den Werten kann ich auch ein Enum nehmen. Das ist vermutlich lesbarer. Aber 42 ist doch eine schöne Zahl. Oder etwa nicht :smiley: ?
Vielleicht findet sich ja ein Enumwert mit einem Schimpfwort :wink:

Kannst dir aussuchen, wie es für dich besser ist.
Code ist vermutlich einfacher.

Hi, ich hätte mir das auf diese Art vorgestellt:
Die einzelnen Animationen bekommen eingene Funktionen.
Diese haben dann alle benötigten Variablen.
Habe es testweise mal mit zwei Animaitonen auf diesem Branch gemacht:

Wenn das in eine Richtung geht die dir / euch gefällt, dann würde ich das auch noch für weitere Animationen so umsetzten. Vielleicht gibt es aber auch bessere Lösungen :slight_smile:

Besteht hier irgendein Interesse dass ich das Thema weiterverfolge oder nicht?

Wenn ich ehrlich bin:
Ich wollte eigentlich nur den aktuellen Code ein bisschen dokumentiert wissen. Der ist aber hier jetzt in großen Teilen wieder umstrukturiert. Ich kann das nicht dauernd nachtesten :woman_shrugging:.