Problem zur Steuerung eines LED Streifens mit Fernbedienung

Hallo,

ich möchte mit ungenutzten Tasten auf meiner Fernbedienung meines Fernsehers mit einem Arduino Nano oder Uno einen LED Streifen (WS2812B) ansteuern. Dieser soll einzelne Farben, aber auch Animationen anzeigen können. Einzelne Farben sind kein Problem, da der Arduino die Farben bei Knopfdruck einmal setzt und er ist wieder frei für das Einlesen weiterer Signale der Fernbedienung.
Das Problem sind die Animationen, die per Taster aktiviert werden und dann für ca. 15 s laufen. Während dieser Zeit kann ich mit der Fernbedienung den Arduino nicht bedienen, da er mit der Animation beschäftigt ist. Erst, wenn die 15 s genau um sind wird in der loop() ein Signal der Fernbedienung wieder einmal abgefragt und dann die Animation wieder gestartet.

Per Interrupt habe ich bereits versucht das Signal der Fernbedienung einzulesen und in einer Variablen zu speichern, was auch (mehr oder weniger) funktioniert hat. Allerdings wird die loop() danach an gleicher Stelle weitergeführt und bis das Signal abgefragt werden kann muss die Animation erst einmal zu Ende laufen.
Das nervt, wenn man z.B. einfach nur die Helligkeit der LEDs oder die Animation verändern will und somit immer eine ganze Animation warten muss, bis der Befehl ausgeführt wird.

Ich bin mir sicher, dass es eine elegante Lösung (auch ohne Interrupt) für dieses Problem gibt, die ich aber leider seit mehreren Stunden Suche im Internet noch nicht gefunden habe.

Vielen Dank schon mal! :slight_smile:

Hi

Du benutzt für Deine Animationen den hübschen Befehl delay().
Das ist hier aber großer Mist, da Du GLEICHZEITIG auch noch auf die Fernbedienung reagieren musst.

Schaue Dir dafür das Beispiel Blink_without_delay aus der IDE an - dort wird per millis() (einer Art System-Uhr) berechnet, ob 'dieses oder jenes' jetzt gerade bearbeitet werden muß.

MfG

Spectrix:
LED Streifen (WS2812B)

Dieser blockierend angesteuerte LED-Streifen mit einer kombinierten Daten/Taktleitung verträgt sich nicht mit einer IR-Fernbedienung.

Problemlos geht es mit APA102 und vergleichbaren, die getrennte Daten- und Taktleitung haben.
So bei meiner LED-Uhr realisiert.

Hallo

Hatte vor ein paar Tagen ein ähnliches Problem mit ws2812b.
Habe hier im Forum erfahren das die ws2812b die interrupts ausschalten.
Als Lösung wurde mir die APA102 vorgeschlagen oder die Steuerung des Arduinos über i2C.
Habe mich für 2 Variante entschieden da Led schon vorhanden waren.
Jetzt nimmt ein Arduino die ir Signale auf und gibt sie an denn zweiten über I2C weiter.
Funktioniert super.Benutze zur zeit 2Arduino uno. Geht mit Sicherheit auch mit 2nano oder Stand Alon Lösung.
Preislicher Aufwand und Platzbedarf sind minimal.

Thorsten4171:
.....
Jetzt nimmt ein Arduino die ir Signale auf und gibt sie an denn zweiten über I2C weiter.
Funktioniert super.Benutze zur zeit 2Arduino uno. Geht mit Sicherheit auch mit 2nano oder Stand Alon Lösung.
Preislicher Aufwand und Platzbedarf sind minimal.

Geht auch mit einem ATtiny85. Siehe hier: IR-ATtiny85

HotSystems:
Geht auch mit einem ATtiny85. Siehe hier: IR-ATtiny85

Geht auch direkt auf Deinen Beitrag: IR-ATtiny85

agmue:
Geht auch direkt auf Deinen Beitrag: IR-ATtiny85

Hatte ich von meinem Link eigentlich auch erwartet....aber so ist das nun mal mit dem Tablet.
Danke!

Super Tipp mit dem ATtiny85.
werde ich bei meinem Projekt ausprobieren. Würde den Platzbedarf nochmals verkleinern.

Thorsten4171:
Würde den Platzbedarf nochmals verkleinern.

Nur zur Sicherheit: Der ATtiny85 ist zusätzlich zum UNO/Nano.

Thorsten4171:
Super Tipp mit dem ATtiny85.
werde ich bei meinem Projekt ausprobieren. Würde den Platzbedarf nochmals verkleinern.

Wenn du in dem verlinkten Thread etwas weiter blätterst, findest du auch Schaltung und Beispiel-Sketch.

agmue:
Nur zur Sicherheit: Der ATtiny85 ist zusätzlich zum UNO/Nano.

Auf was man doch alles achten muss. :wink: :wink:

Idee ist den uno der die ir Signale aufnimmt und an den uno an dem die led hängen sendet durch den ATtiny zu ersetzen. Müsste doch gehen?

Thorsten4171:
Müsste doch gehen?

Ja geht: UNO + UNO wird zu UNO + ATtiny85 oder gar Nano + ATtiny85

Danke für die schnelle Antwort.

Hi

@Thorsten4171
Und ein + für die nette Rückmeldung, wie Du Das erfolgreich gelöst hast - so können noch frischer Gäste bereits von unseren frischen Membern schon gut was lernen!

MfG

agmue:
Ja geht: UNO + UNO wird zu UNO + ATtiny85 oder gar Nano + ATtiny85

Und den Pro Mini nicht vergessen.

HotSystems:
Und den Pro Mini nicht vergessen.

Wie Du weißt, mag ich den ATtiny85, weil ich mit dem in die Arduino-Welt gekommen bin. Weil ich aber im chinesischen Meer fische, könnte ich mir für dieses Projekt auch Nano und Pro Mini in beliebiger Konstellation vorstellen.

agmue:
Wie Du weißt, mag ich den ATtiny85, weil ich mit dem in die Arduino-Welt gekommen bin. Weil ich aber im chinesischen Meer fische, könnte ich mir für dieses Projekt auch Nano und Pro Mini in beliebiger Konstellation vorstellen.

Stimmt, so habe ich es auch gesehen.

Wow, hätte nicht gedacht, dass hier so eine Konversation entsteht :smiley: Danke für eure Vorschläge!
Ich bin gerade dabei, die Animationen mit millis() statt delay() zu realisieren, dauert zwar etwas, scheint aber zu funktionieren :slight_smile:
Der Interrupt am Input des IR Empfängers hat bei mir persönlich trotz WS2812B funktioniert, aber hatte wie gesagt das Problem, dass die Aktualisierung zu lange gedauert hat, weil die Animation auf Grund der delays erst zu Ende laufen musste.