NeoPixel Ring für die Version 3.1

Hier ist mein erster Versuch einen NeoPixel Ring in der Version 3.1 anzusteuern:

Hochfahren: Alles rot
Idle: grün pulsend
StartPlay: rot pulsend
Play: Rainbow drehend
Pause: Rainbow
Admin Menü: blau pulsend

Wer will, kann das einfach in den Dateien ring.hpp/cpp ändern oder macht hier andere Vorschläge.
Der Speicherbedarf für die AiOplus ist kein Problem. Bei den anderen Varianten sollte auf jeden Fall das Feature SerialInputAsCommand in der Datei constants.hpp ausgeschaltet werden. Dazu müssen wahrscheinlich auch noch ein paar Logs gekürzt werden.

Das Ganze ist auf dem Branch issue_073 implementiert und wartet auf Tester.

2 „Gefällt mir“

Sehr cool. Danke schonmal dafür! :sunglasses:
Ich werd es bei Gelegenheit mal mit Ring und Einzel-LED testen.

Ich habe da noch eine Idee. Ich fände es sinnvoll noch eine Fehlersignalisation zu integrieren. Z.B. rot blau pulsende wenn ein Error vom DF Player kommt. Dann hat man schonmal eine Info, aus welcher Richtung das Problem kommt, falls es Mal klemmt.

Ja, gute Idee. Insbesondere wenn man die Logs kürzen musste wegen Speicherknappheit, ist das dann eine Hilfe.
Ich werde mir was überlegen.

Du brauchst ja nur ein Flag setzen, wenn ein mp3 Error Auftritt, das nach verlöschen des Errors wieder zurück gesetzt wird. Eine Abfrage des Flags kann dann das entsprechende LED Feature starten, und man kann dann auch festlegen ob das einmalig, oder nur für eine definierte Zeit ausgeführt wird. Ich hab das in meinem Form so drin, dass bei mp3 Error ein Blink Signal 3x Magenta einmalig gestartet wird. Gleichzeitig habe ich eine Routine eingebaut, die bei mp3 Error ein Nexttrack aufruft und wenn das nicht zum zurücksetzen des Flags führt den Standby-Timer startet. So wird der Tonuino dann abgeschaltet um nicht in einem Blockierten Zustand zu bleiben wo er nicht mehr selbst abschaltet.

Hi Boerge1,
ich hab in meinem Fork bereits eine ganze Integration für NeoPixel drin mit einigen Features.
Vielleicht interessiert es dich da mal rein zu schauen :wink:
Ist allerdings aufgrund der Größe aktuell nur auf der AIO+ möglich soweit ich das beurteilen kann.

Stromverbrauch ist ein relevanter Faktor für die LED-Ringe. 1 Neopixel braucht pro Farbe 10-20mA bei voller Helligkeit, d.h. 30-60mA für weiß, und bei 24 LEDs im Ring sind das ja schon 720-1440mA. Das ist sehr variabel, je nachdem was man für Farben und Animationen verwendet. Dieser Artikel dazu ist sehr aufschlussreich

Ich hab bei meinem Tonuino festgestellt, dass der LED-Ring mehr Strom zieht als der ganze Rest-Tonuino. Insbesondere je mehr LEDS gleichzeitig an sind, und weiß zieht natürlich am meisten Strom. Um die Akkulaufzeit zu optimieren hab ich deshalb versucht meine Animationen so zu schreiben, dass sie schön aussehen und wenige LEDs gleichzeitig an sind.

Ich hab zusätzlich eine Animation (einzelne kreisende rote LED) geschrieben, die alle anderen überschreibt, wenn der Akku kritisch niedrig ist, zusätzlich zu den Durchsagen.

Hab leider grade keine Zeit diese Implementation zu testen :disappointed_relieved: Tolle Arbeit!

2 „Gefällt mir“

Oh Achtung, da gibt es noch etwas dazu zu erwähnen…
Die Neopixel dimmen über die Zeit.
Halbe Helligkeit wird erzeugt, indem die LEDs für einen MykroSekundenBereich ganz hell sind und die gleiche Zeit wieder ganz dunkel.
Sollen sie dunkler werden, wird die Zeit verschoben.
Unser Auge schiebt sich das zusammen und dann scheinen sie dunkler zu sein.

Der fließende Strom spielt da aber mit, deine Beispiel 1440mA fließen also immer (außer eine Farbe wird garnicht genutzt). Nur nicht permanent, sondern pulsierend.
Auf den Ringen und Streifen sind meist kleine Kondensatoren verbaut, die das ganze unter Kontrolle bringen, aber auch nur in Grenzen.

Hallo,
ich versuche mich an einer Box mit Neopixelring und möchte schon die neue Softwareverison nutzen. Ich habe ein paar Anfängerfragen, mit Programmierung habe ich es nicht so :-(. Die Browserverion läuft schon.
Die Neopixel-Version ist noch nicht per Browser-Update zu laden, die muss per IDE aufgespielt werden oder?
Ich habe das AiO+ Board und nutze keine komplett vorgefertigte Buttonplatine sondern habe 5 einzelne Button die an die kleine Platine anschließe die mit dem Board kommt. Wo kann ich den Pixelring anschließen, am Board oder an der kleinen Platine und welche Pins nutze ich?

Schon mal vielen Dank für eure Arbeit!

Ja, es ist leider nicht möglich, alle einzelnen Varianten per Online-Upload anzubieten.
Also musst du die IDE installieren (Readme beachten) und die Datei constants.hpp editieren.

In der constants.hpp ist Pin 10 eingestellt, also musst du PB2 vom Board nehmen.

Danke für die schnelle Antwort, ich werde es am Wochenende probieren.

Ich habe alles zusammengesteck, der Versuchsaufbau läuft gut. Danke für die Hilfe.

Moin!

Wenn du das auf Pin 18 änderst, kann der WS-Pin auf dem keinen Button-Adapter benutzt werden.
Das hätte vielleicht den Vorteil, dass dadurch die Wege etwas kürzer werden, denn häufig sitzt der Ring ja in Nähe der Buttons und 5V und GND sind da ja auch gleich daneben. (Vom dem 1x5 Buttonboard könnten die 3 gleichen Pins auch von den Lötpunkten abgenommen werden.)

Sehr schön!
Ich freue mich, wenn hier eine Meldung kommt, dass ein Feature funktioniert. Und, die Animationen sind ok?

Ja, könnte man machen. Aber ich würde als Default erstmal ein Pin nehmen, den man auch direkt auf dem Board findet. 5V und GND sind da auch direkt daneben. Wenn jemand das anders will, kann das ja ganz leicht in der Datei constants.hpp geändert werden.

Hat denn noch irgendwer das ausprobiert? Ich wäre noch an weiteren Tests und Bemerkungen interessiert.

Ich hab heute mal ein bisschen getestet. Sowohl mit einem 12er Ring als auch mit einem einzelnen Pixel funktioniert alles einwandfrei. :+1:

Hab auch in der ring.hpp ein bisschen mit den Farben rumgespielt, bin aber doch wieder zu den „Standard“-Einstellungen zurück. Mit nur einer LED fand ich die Pause anfangs etwas merkwürdig, weil dann einfach dauerhaft eine Farbe leuchtet. Aber ich kann mir schon vorstellen, dass die Kinder gerade das toll finden und versuchen werden, bei einer bestimmten Farbe zu stoppen. :smiley:

Vielen Dank, @Boerge1!

Jetzt muss ich nur noch Zeit haben, mir einen neuen Button zu basteln in den ich die LED einbaue.

1 „Gefällt mir“

Ich habe noch ein bisschen weitergemacht und kleinere Fehler beseitigt. Insbesondere nach einem Hinweis von @Olasch_1 habe ich noch eingebaut, dass der Ring ausschaltet, wenn der TonUINO in des Sleep Modus geht. Das ist wichtig, wenn man das für die Classic Variante verwenden will. Sonst schaltet die Powerbank nicht aus.
Ich habe auch schon einen Pull Request gemacht und werde das demnächst in den main Branch mergen.

2 „Gefällt mir“

Vielen Dank, für die schnelle Reaktion. Ich möchte mich mal bei allen Bedanken, die sich hier im Form mit sehr viel Arbeit einbringen.

1 „Gefällt mir“

Ich habe noch implementiert, dass man die Helligkeit verändern kann. Dazu muss man einfach im Pausenmodus (State IDLE oder PAUSE) up/down (oder vol+/vol-) drücken.
Dazu habe ich noch ein paar Stellen gefunden, wo man Programm-Speicher sparen kann. Jetzt kann man NeoPixel auch bei der Classic Variante ohne weiter Codeänderung verwenden.

2 „Gefällt mir“