wie im Titel bereits beschrieben habe ich mit einer einfachen if-Bedingung einige Probleme. Ich bin kein Neuling in der Programmierung und kenne mich eigentlich auch mit Arduinos recht gut aus.
Ich bin aktuell dabei ein kleines Programm mit NeoPixel für WS2812 Pixel zu basteln
Leider habe ich folgendes Problem:
Wenn ich nur die if-Condition habe funktioniert alles super:
Die Prüfung der Bedingungen klappt einwandfrei immer und in jedem loop erneut.
Sobald ich aber ein "else" einfüge ist die Prüfung der if-Condition IMMER false und es wird (daher logisch) nur das else ausgeführt.
Zum allgemeinen Verständnis:
Es handelt sich um ein DMX Signal, was eingelesen wird und je nach Signal ein Programm mit den LEDs ausführen soll. Das DMX Signal wird definiv dauerhauft gesendet und es ändert sich auch nachweislich. Also müsste die Prüfung zwischen true und false wechseln, aber genau das passiert eben nicht.
Anbei der Code in vereinfachter Fassung (Problem besteht bei genau diesem Code weiterhin):
Es scheint an strip.show(); zu liegen. Sobald ich es in der Funktion red() auskommentiere funktioniert die Prüfung im if auch. Klar, dann geht die Funktion dann nicht mehr.
Aber es scheint somit am strip.show(); zu liegen. Aber wieso? Das darf ja mehrfach vorkommen!? Ich habe es auch aus jeder Funktion raus genommen und am Ende vom Loop eingefügt, das verändert nichts.
agmue:
Dein Programm ohne DMX ergibt folgende Warnungen:
warning: 'i' may be used uninitialized in this function [-Wmaybe-uninitialized]
Mit for (int i = 0; i < NUM_LEDS; i++) funktioniert das Programm, sieht zumindest so aus
Hat leider keinen Unterschied ergeben ob ich "int i" oder "int i = 0" schreibe.
Und Serial.*() ist nicht einsetzbar, da ich die Library DMXSerial.h nutze und die die serielle Schnittstelle für sich beansprucht. Ich empfange ja über den RX-Pin ein DMX Signal.
FloF195:
Hat leider keinen Unterschied ergeben ob ich "int i" oder "int i = 0" schreibe.
Schade.
FloF195:
Und Serial.*() ist nicht einsetzbar, da ich die Library DMXSerial.h nutze und die die serielle Schnittstelle für sich beansprucht. Ich empfange ja über den RX-Pin ein DMX Signal.
Kleiner Scherzkeks! Ich verwende Serial.*(), weil ich DMX nicht habe
Da es mit Serial.*() funktioniert, muß es einen Unterschied zu DMXSerial.h geben.
Die Ansteuerung von NeoPixel-LEDs ist leider zeitkritisch und blockierend, weshalb andere zeitkritische Anwendungen wie Kommunikation dadurch behindert werden können oder umgekehrt. Einzige mir bekannte Lösung: verwende APA102 (DotStar).