Go Down

Topic: WS2812 , KFZ Fussraum LED Steuerung mit Türkontakt und Zentralverriegelung (Read 4212 times) previous topic - next topic

agmue

Irgendwie bist du der, der sich mit deinem Code auskennt und Helfen Kann :D
Nicht immer verstehe ich, was ich tue, also sei gewarnt vor mir :smiley-twist: Das gilt beispielsweise für Versuche mit der Vererbung in OOP. Außerdem haben Weihnachtsmärkte momentan Vorrang, da selten im Jahr und besonders, wenn es um das Probieren in dieser Gegend schwer zu beschaffender Honigsorten geht. Aber ich war erfolgreich :smiley-mr-green:

Es gibt genügend hilfreiche Menschen in diesem Forum, die meine aus ihrer Sicht simplen Programme nach Fehlern durchforsten. Ich habe schon harsche Kritik einstecken müssen, aber nur durch Fehler lernt man. Daher bedanke ich mich für jede konstruktive Kritik.

Ich habe wirklich viel probiert ...
Dann wirst Du enttäuscht sein, wie einfach es eigentlich ist:

Code: [Select]
#include <Adafruit_NeoPixel.h>
#include <Bounce2.h>
Bounce debTK = Bounce();
const byte TK = 7; //Das Wort „TK Türkontakt" steht jetzt für den Wert 7.
Bounce debZVOpen = Bounce();
const byte ZVOpen = 8; //Das Wort „ZVOpen Zentralverriegelungs Impuls oeffnen" steht jetzt für den Wert 8.
Bounce debZVClose = Bounce();
const byte ZVClose = 9; //Das Wort „ZVClose Zentralverriegelungs Impuls schliessen" steht jetzt für den Wert 9.

const byte LEDFussraum = 6;// LED Fussraum Bel.=Pin6
#define NUM_LEDS 9 // ws2812 LEDS conected
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUM_LEDS, LEDFussraum, NEO_RGB + NEO_KHZ800); // bei mir sind die Farben vertauscht!
// Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUM_LEDS, LEDFussraum, NEO_GRB + NEO_KHZ800);

void setup() {
  pinMode(TK, INPUT_PULLUP); //Der Pin mit dem TK Anschluss (Pin 7) ist jetzt ein Eingang.
  debTK.attach(TK);
  debTK.interval(30);
  pinMode(ZVOpen, INPUT_PULLUP); //Der Pin mit dem ZVOpen Anschluss (Pin 8) ist jetzt ein Eingang.
  debZVOpen.attach(ZVOpen);
  debZVOpen.interval(30);
  pinMode(ZVClose, INPUT_PULLUP); //Der Pin mit dem ZVClose Anschluss (Pin 9) ist jetzt ein Eingang.
  debZVClose.attach(ZVClose);
  debZVClose.interval(30);
  strip1.begin();
}

void farbausgabe(byte r, byte g, byte b)
{
  for (byte j = 0; j < NUM_LEDS; j++)
  {
    strip1.setPixelColor(j, strip1.Color(r, g, b));
  }
  strip1.show();
}

void loop() {
  debTK.update();
  debZVOpen.update();
  debZVClose.update();
  uint32_t verzoegerung = 0;
  byte r, g, b;

  if (debTK.read())
  { r = g = b = 0; // aus
  }
  if (debTK.rose())
  { r = g = b = 30; // weiss gedimmt
    verzoegerung = 5000;
  }
  if (debZVClose.fell())
  { r = 255; g = b = 0; // Rot
    verzoegerung = 5000;
  }
  if (debZVOpen.fell())
  { r = 0; g = 255; b = 0; // Gruen
    verzoegerung = 3000;
  }
  if (!debTK.read())
  { r = g = b = 255; // weiss hell
  }

  farbausgabe(r, g, b);
  if (verzoegerung > 0)
  {
    delay(verzoegerung);
    verzoegerung = 0;
  }
}

Wichtig zu verstehen ist die Priorisierung durch die Reihenfolge der Bedingungen. "aus" hat die niedrigste, "weiss hell" die höchste Prriorität. Daher habe ich die Variablen r, g und b eingeführt, weil erst am Ende die Ausgabe erfolgen soll, sonst flackerts.

Bei unterschiedlichen Verzögerungszeiten kann man diese Information gleich mit in die Variable packen, deren Typ ja nicht in Stein gemeißelt ist.

Macht das Programm, was Du möchtest? Wäre es wünschenswert, das blockierende delay zu ersetzen?

gibt es einen Ruhe oder Schlafmodus für den Arduino Nano? obwohl der Standbystrom ja nicht gefärlich werden sollte? Habe eine extra grössere Ah Auto Batt installiert für solche spielereien..
Mein StepDown mit Nano dran möchte 20 mA oder pro Tag 0,48 Ah. Wenn Deine fettere Autobatterie 10 Ah mehr als die Standard hat, entleert sich die fette innerhalb von 20 Tagen auf die Standardkapazität. Da Du bei längeren Pausen für das Show-Car sowieso eine Erhaltungsladung vorsehen mußt, sehe ich da kein Problem. Und ein Schalter, der alle Gimmicks ausschaltet, dürfte auch nicht das Problem sein. Komfortabler wäre eine Selbsthalteschaltung, wo sich der Arduino mit Verzögerung die Versorgung nimmt und per Zentralverriegelung wieder einschaltet.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

agmue

Es gibt da wohl noch eine Verzögerung: "-Wen das FZ Abgeschlossen wird für 5sek ROT"

Daher hatte ich an eine Selbsthaltung gedacht.

Letztlich handelt es sich ja um ein Wunschgebilde, da kann man es so machen, wie es mit vertretbarem Aufwand zu realisieren ist.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

agmue

Wenn alle LED die gleiche Farbe haben sollen hat die Ansteuerbibliothek eine Funktion um alle LED auf die gleiche Farbe zus etzen.
Hallo Uwe, mir ist so eine Funktion nicht bekannt, wie heißt sie?

zwischen 24 bis 40 stk.. je nachdem wie die ausleuchtung ist, muss ich dann mal live testen, denke zwar 40 werden nicht ganz benötigt oder sonst halt runter gedimmt per Neopixel code, damit die ausleuchtung besser ist aber dadurch ja auch weniger Leistung vebraucht.
... aber viel wird man da für 9 x rot nicht brauchen.
@noiasca: Ich teste mit den 9 LEDs aus meinem Avatar-Bild, dann kann ich die mit USB versorgen. Eigentlich verwende ich lieber APA102, da hätte ich hier 120 rumhängen.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

uwefed

Hallo Uwe, mir ist so eine Funktion nicht bekannt, wie heißt sie?
Wahrscheinlich bringe ich da die Bibliotheken durcheinander.

showColor() der FastLED Biblothek. https://github.com/FastLED/FastLED

Grüße Uwe

postmaster-ino

Hi

Selbst, wenn nicht - sollte sich eine FOR-Schleife gerade so noch selber in einer Funktion verstecken lassen, um diese Funktionalität selber hin zu bekommen.

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

Akropolis

Also so sollte es werden: KFZ Abgeschloss, Arduino im schlaf Modus.

- ZVOpen Impuls HIGH, es leuchtet 5 sek Grün, dann weiss gedimmt,
öffnet sich die Fahrzeug türe nicht oder ZV wird nicht wieder abgeschlossen (Countdown 30Sek), geht der Arduino schlafen.Alle LEDs OFF. Interrupt einfügen damit er mit einem TK oder ZV Close Signal wieder erwachachen kann aus dem schlafmodus und die zustände abfragt.

- Türe offen, es leuchtet immer Weiss hell.
- Türe zu, es leuchtet weiss gedimmt
-Türe zu, Zündplus aktiv, es leuchten alle LEDs gelb gedimmt, dass ist angenehmer bei der fahrt.

- FZ Motor aus = Zündplus Signal weg, ich steige aus, Alle LED weiss hell via TK, Dann türe zu, es leuchtet noch 30Sek weiss gedimmt nach und dann alle LED OFF.
öffnet sich die Fahrzeug türe nicht oder ZV wird nicht abgeschlossen (nochmals Countdown 30Sek), geht der Arduino schlafen. Interrupt einfügen damit er mit einem TK oder ZV Close Signal wieder erwachen kann aus dem schlafmodus und dien aktuellen zustände erledigt.

- FZ wird abgeschlossen, es leuchtet 5sek rot und geht dann in den Schlaf Modus.

Dass ganze damit Die LED Beleuchtung nicht ständig leuchtet, wenn man das Fahrzeug offen lässt aber nicht abschließt..  oder die türen geschlossen hat und das FZ nicht abgeschlossen wird. So, dass der Der Arduino ein Maximum an Strom sparrt.

die delays werden Jetzt bald störend.. müssen wohl doch noch durch millis ersetzt werden..
Countdown weis ich auch noch nicht wie machen.. aber schon paar beispiele versucht.  ( Darf ein einfacher code sein )

wer kann mir da Helfen ? :) Habe den Code nochmals angepasst und gesäubert. Interrupt 2 für TK Funktioniert noch nicht.

Interrupts stehen mir leider auch nur 2 zur verfügung mit einem Arduino Nano MCU328p, diese 2 sollte eventuell ja ausreichend sein. Interrupt für ZVopen und TK Türkontakt, 3 währen besser  für ZVClose noch einen.
Für den Fall, wen die Türen zu sind und alle led OFF, im Schlafmodus, der Arduino erwacht mit ZVClose und noch kurz 5sek rot leuchtet :D aber auf dass könnte ich verzichten, dieser fall wird ja sehr selten eintreffen.
Langsam ist Präzise und Präzise ist schnell ;)

Akropolis

Macht das Programm, was Du möchtest? Wäre es wünschenswert, das blockierende delay zu ersetzen?
Mein StepDown mit Nano dran möchte 20 mA oder pro Tag 0,48 Ah. Wenn Deine fettere Autobatterie 10 Ah mehr als die Standard hat, entleert sich die fette innerhalb von 20 Tagen auf die Standardkapazität. Da Du bei längeren Pausen für das Show-Car sowieso eine Erhaltungsladung vorsehen mußt, sehe ich da kein Problem. Und ein Schalter, der alle Gimmicks ausschaltet, dürfte auch nicht das Problem sein. Komfortabler wäre eine Selbsthalteschaltung, wo sich der Arduino mit Verzögerung die Versorgung nimmt und per Zentralverriegelung wieder einschaltet.

jezt ja, angepasst auf meine wünsche. dein code ist doch viel sauberer/kurzer besser zu lesen. schaffe es aber nicht nach ZVClose und 5sek delay  das hier einzufügen :/ LED OFF Schaltung und arduino schlafen legen, im anderen code von mir klappte dies noch

Code: [Select]
#include <Adafruit_NeoPixel.h>
#include <Bounce2.h>
#include <avr/sleep.h>     // Bibliothek fuer den Schlafmodus
#include <avr/power.h>     // Bibliothek fuer die Abschaltung der Peripherie
Bounce debZVOpen = Bounce();
const byte ZVOpen = 2; //Das Wort „ZVOpen Zentralverriegelungs Impuls oeffnen" steht jetzt für den Wert 2.
Bounce debTK = Bounce();
const byte TK = 3; //Das Wort „TK Türkontakt" steht jetzt für den Wert 3.
Bounce debZuendplus = Bounce();
const byte Zuendplus = 8; //Das Wort „Zuendplus" steht jetzt für den Wert 8.
Bounce debZVClose = Bounce();
const byte ZVClose = 9; //Das Wort „ZVClose Zentralverriegelungs Impuls schliessen" steht jetzt für den Wert 9.
const byte LEDFussraum = 6;// LED Fussraum Bel.=Pin6
#define NUM_LEDS 8 // ws2812 LEDS conected
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUM_LEDS, LEDFussraum, NEO_RGB + NEO_KHZ800); // bei mir sind die Farben vertauscht!
// Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUM_LEDS, LEDFussraum, NEO_GRB + NEO_KHZ800);

// SCHLAFMODUS // ISR fuer ZVOpen Pin2 (Int.0). bei 328p MCU
void ZVOpenisr(void) {
  detachInterrupt(0);} // detach Interrupt, damit er nur einmal auftritt
void enter_sleep(void) {
  attachInterrupt(0, ZVOpenisr, LOW);
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();
  sleep_mode();
  sleep_disable();}
 
void setup() {
  pinMode(ZVOpen, INPUT_PULLUP); //Der Pin mit dem ZVOpen Anschluss (Pin 2) ist jetzt ein Eingang.
  debZVOpen.attach(ZVOpen);
  debZVOpen.interval(30);
  pinMode(TK, INPUT_PULLUP); //Der Pin mit dem TK Anschluss (Pin 3) ist jetzt ein Eingang.
  debTK.attach(TK);
  debTK.interval(30);
  pinMode(Zuendplus, INPUT_PULLUP); //Der Pin mit dem Zuendplus Anschluss (Pin 8) ist jetzt ein Eingang.
  debZuendplus.attach(Zuendplus);
  debZuendplus.interval(30);
  pinMode(ZVClose, INPUT_PULLUP); //Der Pin mit dem ZVClose Anschluss (Pin 9) ist jetzt ein Eingang.
  debZVClose.attach(ZVClose);
  debZVClose.interval(30);
  strip1.begin();
}

void farbausgabe(byte r, byte g, byte b)
{
  for (byte j = 0; j < NUM_LEDS; j++)
  {
    strip1.setPixelColor(j, strip1.Color(r, g, b));
  }
  strip1.show();
}

void loop() {
  debTK.update();
  debZVOpen.update();
  debZVClose.update();
  debZuendplus.update();
  uint32_t verzoegerung = 0;
  byte r, g, b;
 
 if (debTK.read())
  { r = g = b = 30; // weiss gedimmt, TK Tuere geschlossen
  }
 if (debTK.read() && !debZuendplus.read()) // gelb gedimmt, TK Tuere geschlossen und Zuendplus vorhanden, Fuer die Fahrt.
  {r = 36; g = 18; b = 0; 
  }
 if (debZVClose.fell())
  { r = 255; g = b = 0; // Rot, ZVClose
    verzoegerung = 3000;
    /* r = g = b = 0;                                  // Rot OFF, ZVClose
       attachInterrupt(0, ZVOpenisr, LOW);             // Aktiviere Interrupt auf Pin2             
       set_sleep_mode(SLEEP_MODE_PWR_DOWN);            // Einstellung welcher Modus
       sleep_mode();                                   // Schlafen legen                                                             
       detachInterrupt(0);                             // Hier gehts nach dem Schlafen weiter: ZV Open */
  } 
 if (debZVOpen.fell())
  { r = 0; g = 255; b = 0; // Gruen, ZVOpen
    verzoegerung = 2000;
  }
 if (!debTK.read())
  { r = g = b = 255; // weiss hell, TK tuere offen
  }

farbausgabe(r, g, b);
 if (verzoegerung > 0)
  {
    delay(verzoegerung);
    verzoegerung = 0;
  }
}
}


wer kann mir da bitte helfen :)
Langsam ist Präzise und Präzise ist schnell ;)

Akropolis

Dann wirst Du enttäuscht sein, wie einfach es eigentlich ist:

kannst du mir nochmals helfen? bitte

schaffe es nicht, nachdem ZVClose Signal, LED 5sek rot aktiv ist.
Danach einen weiteren befehl einfügen.. z.B dass, alle LED aus sind und ich noch den Interrupt einfügen kann.

Muss nur mal ein vorgeschmackt bekommen wo einfügen..

und Ja ich habe mich dumm und dämlich versucht nach dem Delay von ZVClose irgendwas zusätzliches auszuführen im gleichen IF Befehl. ???? Ist das wieder so einfach?

Bin ja gespannt.. Liegt es am Delay das die Funktionen übersprüngen werden? es führt nur einen befehl in der If abfrage aus!

Code: [Select]
if (debZVClose.fell())
  { r = 255; g = b = 0;                             // Rot ON, ZVClose
    verzoegerung = 3000;                            // Verzoergerung
    r = g = b = 0;                                  // Rot OFF, ZVClose
    attachInterrupt(0, ZVOpenisr, LOW);             // Aktiviere Interrupt auf Pin2              
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);            // Einstellung welcher Modus
    sleep_mode();                                   // Schlafen legen                                                            
    detachInterrupt(0);                             // Hier gehts nach dem Schlafen weiter: ZV Open
  }  
Langsam ist Präzise und Präzise ist schnell ;)

agmue

kannst du mir nochmals helfen? bitte
Mit SLEEP_MODE kenne ich mich nicht aus, habe ich noch nicht benötigt, da halte ich die Klappe.

Außerdem will ich jetzt die Lichterketten überprüfen, läßt sich irgendwie nicht verschieben :)
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

postmaster-ino

Hi

... mit einer 08/15 LED-Lichterkette wärest Du bereits lange fertig - immer das salbstgebastelte WS2812B-Zeugs ... wobei ... ich muß Mal weg *grööhl* ;)

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

Akropolis

Mit SLEEP_MODE kenne ich mich nicht aus, habe ich noch nicht benötigt, da halte ich die Klappe.

Außerdem will ich jetzt die Lichterketten überprüfen, läßt sich irgendwie nicht verschieben :)

:D ich mich auch erst seit 2 tagen ein wenig.. der sleep auf ZV Close läuft und aktiviert sich wieder mit ZVOpen.

Es ist einfacher, wie du mir Helfen könntest als du denkst :)
Denke ich mal ...
Code: [Select]
if (debZVClose.fell())
  { r = 255; g = b = 0;                             // Rot ON, ZVClose
    verzoegerung = 3000;                            // Verzoergerung
    r = g = b = 0;                                  // Rot OFF, ZVClose


mal schritt 1 nach dem die verzögerung für ZVClose läuft sprint er nach Beendigung natürlich immer auf weiss gedimmt zurück. Wo im code muss /kann ich die LEds nachd er verzögerung ZVClose ausschalten ??

so wie es jezt im code steht läuft es folgendermaßen ab.

-ZVClose LEDs Rot
-Verzoegerung 5Sek.
-Danach springt die Steuerung auf weiss gedimmt TKOpen zurück und dann wieder zurück zur abfrage im IF Befehl, für die ZVClose steuerung.
-Und geht erst dann in den Sleep Modus, mit weiss gedimmt anstatt alle LEDs off.

in der If Abfrage will der nur ein befehl annehmen!!

Code: [Select]

if (debZVClose.fell())
  { r = 255; g = b = 0;                    // Rot, ZVClose
    verzoegerung = 5000;
    }
    else if (debZVClose.rose())
    {r = g = b = 0;                        // Rot OFF, ZVClose
    verzoegerung = 5000;
    attachInterrupt(0, ZVOpenisr, LOW);             // Aktiviere Interrupt auf Pin2              
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);            // Einstellung welcher Modus
    sleep_mode();                                   // Schlafen legen                                                            
    detachInterrupt(0);                             // Hier gehts nach dem Schlafen weiter: ZV Open
}



auch mit der else if abfrage klappts nicht.. (zum testen) gleiches muster, er geht zwar in den else bereich rein.
ZVClose dann Leds 5sek rot, dann auf weiss gedimmt, in den sleep Modus.  lasse ich ihn erwachen, mit ZVOpen geht er erst 5sek mit den LEDs OFF und dann wieder weiter normal im Code, Standart weiss gedimmt.

Also völlig durcheinander in der folge.. weiss gedimmt hat die höchste priorität, aber warum geht er in die weiss gedimmte  steuerung rein anstatt direkt zum else if bereich von ZVClose.... sind delays schuld? habe glaubs auch ohne delay getestet ohne erfolg.. :/  auch die ZVClose abfrage zu oberst hin gemacht :/ klappte natürlich nicht.. steuerung dan noch mehr durcheinander..

eigentlich das einfachste... :D eine led farbwechsel in selben befehl aber es klappt nicht.

habe nur zum testen anstatt Sleep_Modus ein 5sek delay genoomen um visuell zu sehen ob der IF bereich sich richtig abarbeitet..
Egal was ich teste, meisten das gleiche komische verhalten.

aber ja ... Bahnhoof :D mit Standart Neopixel Strip code iss das alles kein Problem, dann iss der Code einfach 10x Grösser und unübersichtlicher :/ wollte deine Struktur bei behalten.
Langsam ist Präzise und Präzise ist schnell ;)

Akropolis


[/quote]
Hi

... mit einer 08/15 LED-Lichterkette wärest Du bereits lange fertig - immer das salbstgebastelte WS2812B-Zeugs ... wobei ... ich muß Mal weg *grööhl* ;)

MfG
$
LOL :D da hast du wohl recht :D  aber wer will schon Standart
brauche oder will ja 4 Farben. ROT, GRUEN, GELB und WEISS in der Steuerung.

was habt ihr den WS2812 Lichterketten am Weihnachtsbaum? hahahha
Langsam ist Präzise und Präzise ist schnell ;)

postmaster-ino

Hi
was habt ihr den WS2812 Lichterketten am Weihnachtsbaum? hahahha
Noch nicht - dafür sollte erst der Baum stehen ;)
(Aber JA, mein 'Wurm' wurde das Jahr nur selten weiterverarbeitet - werde ich dieses Jahr aber mit leben können ... müssen)

5m mit 150 LED warten auf einen Nano, Der Sie zum Leben erweckt ...

Hat aber rein gar Nichts mit der ZV des TO zu tun - sorry dafür

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

Akropolis

/quote]
HiNoch nicht - dafür sollte erst der Baum stehen ;)
(Aber JA, mein 'Wurm' wurde das Jahr nur selten weiterverarbeitet - werde ich dieses Jahr aber mit leben können ... müssen)

5m mit 150 LED warten auf einen Nano, Der Sie zum Leben erweckt ...

Hat aber rein gar Nichts mit der ZV des TO zu tun - sorry dafür

MfG
macht doch nix ;) hoffe bei dir läuft die steuerung wie sie soll und erleuchtet dein bäumchen schön :D

wird sicher noch jemand auftauchen der mir helfen kann und kurz eine led strip an den arduino anschliesst oder in den code reinschaut... wo der fuchs steckt!
Langsam ist Präzise und Präzise ist schnell ;)

agmue

wird sicher noch jemand auftauchen der mir helfen kann und kurz eine led strip an den arduino anschliesst oder in den code reinschaut... wo der fuchs steckt!
Bis dahin könntest Du Dir eine Variante mit millis ansehen:

Code: [Select]
#include <Adafruit_NeoPixel.h>
#include <Bounce2.h>
Bounce debTK = Bounce();
const byte TK = 7; //Das Wort „TK Türkontakt" steht jetzt für den Wert 7.
Bounce debZVOpen = Bounce();
const byte ZVOpen = 8; //Das Wort „ZVOpen Zentralverriegelungs Impuls oeffnen" steht jetzt für den Wert 8.
Bounce debZVClose = Bounce();
const byte ZVClose = 9; //Das Wort „ZVClose Zentralverriegelungs Impuls schliessen" steht jetzt für den Wert 9.

const byte LEDFussraum = 6;// LED Fussraum Bel.=Pin6
#define NUM_LEDS 9 // ws2812 LEDS conected
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUM_LEDS, LEDFussraum, NEO_RGB + NEO_KHZ800); // bei mir sind die Farben vertauscht!
// Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUM_LEDS, LEDFussraum, NEO_GRB + NEO_KHZ800);

void setup() {
  pinMode(TK, INPUT_PULLUP); //Der Pin mit dem TK Anschluss (Pin 7) ist jetzt ein Eingang.
  debTK.attach(TK);
  debTK.interval(30);
  pinMode(ZVOpen, INPUT_PULLUP); //Der Pin mit dem ZVOpen Anschluss (Pin 8) ist jetzt ein Eingang.
  debZVOpen.attach(ZVOpen);
  debZVOpen.interval(30);
  pinMode(ZVClose, INPUT_PULLUP); //Der Pin mit dem ZVClose Anschluss (Pin 9) ist jetzt ein Eingang.
  debZVClose.attach(ZVClose);
  debZVClose.interval(30);
  strip1.begin();
}

void loop() {
  debTK.update();
  debZVOpen.update();
  debZVClose.update();
  static uint32_t jetzt = 0, farbMillis = 0, verzoegerung = 0;
  jetzt = millis();
  static byte r, g, b;

  if ((debTK.read()) && (verzoegerung == 0))
  { r = g = b = 0; // aus
  }
  if (debTK.rose())
  { r = g = b = 30; // weiss gedimmt
    verzoegerung = 5000;
    farbMillis = jetzt;
  }
  if (debZVClose.fell())
  { r = 255; g = b = 0; // Rot
    verzoegerung = 5000;
    farbMillis = jetzt;
  }
  if (debZVOpen.fell())
  { r = 0; g = 255; b = 0; // Gruen
    verzoegerung = 3000;
    farbMillis = jetzt;
  }
  if (!debTK.read())
  { r = g = b = 255; // weiss hell
    verzoegerung = 0;
  }

  for (byte j = 0; j < NUM_LEDS; j++)
  { strip1.setPixelColor(j, strip1.Color(r, g, b));
  }
  strip1.show();

  if ((jetzt - farbMillis >= verzoegerung) && (verzoegerung > 0))
  { verzoegerung = 0;
  }
}

Die Verzögerungen können sich nun gegenseitig unterbrechen. Das erscheint mir realitätsnäher.

Mich würde interessieren, wie viel Strom Deine LEDs bei der Farbe Schwarz und Dein StepDown im Leerlauf benötigen.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Go Up