Neopixel über Fernbedienung

Hallo Leute,

ich habe folgendes Problem. Ich möchte Neopixel über eine IR Fernbedienung steuern.
Dieses funktioniert alles recht gut bisher, bis auf die Effekte…
Drücke ich die Taste für ein Effekt, befindet sich das Programm ja in einer Schleife, sodass die Fernbedienung nicht mehr gelesen werden kann. Folglich kriege ich die Neopixel nicht mehr aus.

Was kann ich tun, um die Fernbedienung auch in der Schleife (zumindest alle paar Sekunden ) auszulesen?

Ich probiere seit Tagen schon rum…

Könnt Ihr mir da helfen?

Gruß

effect_test.ino (6.98 KB)

ditze:
.......

Was kann ich tun, um die Fernbedienung auch in der Schleife (zumindest alle paar Sekunden ) auszulesen?

Ich probiere seit Tagen schon rum...

Könnt Ihr mir da helfen?

Du kannst das Problem mit einem 2. Controller (z.B. ATtiny85) umgehen.
Den verwendest du zur IR-Steuerung und schickst auf den Arduino einen Interrupt um die weitere Steuerung vorzunehmen.

Eine Möglichkeit, dies mit nur einem Controller zu regeln, gibt es nicht?
Ich frage , weil im Gehäuse kein Platz mehr ist.

ditze:
Eine Möglichkeit, dies mit nur einem Controller zu regeln, gibt es nicht?
Ich frage , weil im Gehäuse kein Platz mehr ist.

Du möchtest zwei Sachen gleichzeitig machen. Das kannst Du z. B. mit einem „endlichen Automaten“. Das ist eine Art Strickmuster oder Programmier-Strategie.

Vielleicht hilft Dir, was mir dazu eingefallen ist. Guck hier und hier.

Gruß

Gregor

ditze:
Eine Möglichkeit, dies mit nur einem Controller zu regeln, gibt es nicht?
Ich frage , weil im Gehäuse kein Platz mehr ist.

Da habe ich aktuell keine Idee.

Das Problem ist ja, wenn der Effekt läuft, lässt er außer einem IRQ erst mal nichts zu.
Somit wertet er auch nichts (IR) aus.

gregorss:
Du möchtest zwei Sachen gleichzeitig machen. Das kannst Du z. B. mit einem „endlichen Automaten“. Das ist eine Art Strickmuster oder Programmier-Strategie.

Allein mit einem “endlichen Automaten” wird das nicht funktionieren.

Du musst die Schleifenfunktion im Neopixel unterbrechen oder eben warten, bis die fertig ist.

Hi

Da sowohl IR wie auch die WS2812B ein enges Timing besitzen, ist Beides zusammen immer ein Schuß ins Knie.
Entweder reragierst Du gerade nicht auf die IR-Fernbedienung, da Du gerade ein Muster ausgeben musst (die IRQs sind dann eh gerade abgeschaltet und der Arduino bekommt von dem IR-Geraffel eh Nichts mit), oder Du liest fröhlich die IR-Fernbedienung ein und verpasst den Zeitpunkt, wo Du ein neues Muster aussenden müsstest - es lag't wie blöd, wenn jemand auf der FB rumdrückt.
(oder es wird nicht reagiert, da das Drücken ja nicht 'gesehen' wird)

DAS ist der Job für einen ATtiny85, Dem man einen IR-Empfänger an die Beinchen lötet und via I²C mit dem Arduino schwätzen lässt.
Ggf. mit 'Meldeleitung' - wobei ein regelmäßiges Abfragen - halt, wenn Zeit dafür ist - ob ein neuer IR-Code empfangen wurde, passt genau so in die 'Sendelücke', wie das 'Oha, neue Daten, laß Mal saugen' - Beides die gleiche Zeit - zumindest, wenn Daten da sind.
Und man spart die 'Melde-Leitung'.

Der ATtiny85 ist ein 8-Pin-µC, als SMD wirst Du Diesen kaum auf der Platine finden, wenn Der Dir runter fällt - also kein Platz ist hier kein Argument.
Als DIP und in 'Dead Bug Technik' wird sich auch noch Platz für den 'Käfer' finden lassen.

MfG

Und hier dazu die Bauanleitung für den IR-Empfänger im ATtiny85.

Ein zweiter Controller bringt nichts.
Du mußt die Programmlogik generell umbauen

Du darfst nicht in eine Funktion springen und dort bleiben um den Effekt darzustellen.

Du mußt einen endlichen Automaten programmieren.

Eine Statusvariable und eine Zustandsvariable für den Effekt der bei jedem loop() Durchgang abgearbeitet wird. Da kann der Empfangsteil für IR im loop() auch aufgerufen werden.

grüße Uwe

HotSystems:
Allein mit einem "endlichen Automaten" wird das nicht funktionieren.

Das kann ich mir kaum vorstellen. Bei meinen Spielereien komme ich locker auf loop-Zeiten, die ich in kHz messen kann.

HotSystems:
Du musst die Schleifenfunktion im Neopixel unterbrechen oder eben warten, bis die fertig ist.

Ich kenne diese Neodings halt nicht. Hast Du ein Datenblatt zur Hand?

Gruß

Gregor

Ja klar

SK6812RGBW-datasheet.pdf (1.09 MB)

Schaue mal bei Writing Your Own Library.

gregorss:
Das kann ich mir kaum vorstellen.

IR-Fernbedienung ist zeitkritisch, NeoPixel auch, das beißt sich bei den Interrupts. Effektiv programmieren hilft leider nicht.

ditze:
Eine Möglichkeit, dies mit nur einem Controller zu regeln, gibt es nicht?

APA102 oder vergleichbare mit Daten und Takt getrennt, flexibler Takt mit ca. zehnfacher Framerate, wenn der µC das mitmacht.

agmue:
... das beißt sich bei den Interrupts. ...

Das ist ein Argument, das ich mangels Kenntnissen nur schlecht einschätzen kann. Beim nächsten Gang in den Elektronikshop wird mal etwas zum Spielen gekauft. Bis dahin glaube ich Dir :slight_smile:

Gruß

Gregor

gregorss:
Bis dahin glaube ich Dir :slight_smile:

Danke! Ich gebe natürlich nur den derzeitigen Stand meiner Kenntnisse und meiner Erfahrung wider und lerne gerne dazu, deswegen bin ich ja hier aktiv. Solltest Du zu anderen Schlüssen kommen, dann lasse es mich bitte wissen!

Gerade gefunden, aber noch nicht getestet: Non-Blocking WS2812 LED Library

Hi

Wenn das Teil die NeoPixel (aka WS2812B) per DMA anschwätzt, hat der Programmfluss damit Nichts mehr zu tun.
Wird somit nur auf µCs gehen, Die DMA in Hardware bieten - wie immer: was nicht da ist, geht aber auch nicht kaputt :wink:

Danke für den Link - davon bin ich zwar noch Jahre entfernt, aber n2k (nice to know)!

MfG