Go Down

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

Akropolis

Hallo zusammen :)

Ich bin gerade daran zu versuchen meine Idee in Realität um zu setzen.
Ich scheitere aber daran wie ich vorgehen sollte..
Am besten wohl mit switch case? oder gelingt mir dies auch mit if variablen?

unten ist mal was ich an Code so rumprobiert hatte...
Komme aber gerade nicht weiter :(

Ich Währe über Tipps und Hilfe sehr Dankbar :)


Der Arduino Steuert ein paar ws2812 leds, als Fussraumbeleuchtung via Türkontakt und Zentralverriegelungs Impulse für schliessen und öffnen des Fahrzeuges.

Diese sollen:

-Wen das FZ aufgeschlossen wird Fussraumbeleuchtung für 5sek Grün
-und dann auf gedimmt weiss leuchten

-bei geschlossenen Türen immer gedimmt weiss leuchten solange das FZ nicht abgeschlossen wurde
-wen die Türen offen sind helligkeit auf 100% erhöhen

-Wen das FZ Abgeschlossen wird für 5sek ROT
-und dann komplett ausgeschaltetet Fussraumbeleuchtung

wartend bis das FZ wieder aufgeschlossen wird.

Hört sich irgendwie einfacher an, als es zu programmieren währe :/

Bin immer noch Anfänger.

brauche ich noch eine FZ Signal Zündplus anbindung? damit der Arduino weiss wen der FZ Motor nicht läuft (kein zündplus vorhanden ist) aber nicht abgeschlossen wurde, die fussraum bel. nicht unentlich leuchtet...

Ach ja.. mir ist klar alle KFZ signale von 12v auf 5v runter schalten mit passendem widerstand.
ZV Steht für Zentralverriegelung und TK für Türkontakt

Langsam ist Präzise und Präzise ist schnell ;)

Akropolis

hier mal ein test Code von mir, wo ich rum gespielt habe ohne erfolge!

Ich brauche ein paar stösse in die richtige Richtung :D

Code: [Select]

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
int TK=7; //Das Wort „TK Türkontakt" steht jetzt für den Wert 7.
int TKStatus=0; //Das Wort „TKStatus" steht jetzt zunächst für den Wert 0. Später wird unter dieser Variable gespeichert, ob der Türkontakt geschlossen ist oder nicht.
int ZVOpen=8; //Das Wort „ZVOpen Zentralverriegelungs Impuls öffnen" steht jetzt für den Wert 8.
int ZVOpenStatus=0; //Das Wort „ZVOpenStatus" steht jetzt zunächst für den Wert 0. Später wird unter dieser Variable gespeichert, ob der ZV Impuls High oder Low ist.
int ZVClose=9; //Das Wort „ZVClose Zentralverriegelungs Impuls schliessen" steht jetzt für den Wert 9.
int ZVCloseStatus=0; //Das Wort „ZVCloseStatus" steht jetzt zunächst für den Wert 0. Später wird unter dieser Variable gespeichert, ob der ZV Impuls High oder Low ist.

const int LEDFussraum = 6;// LED Fussraum Bel.=Pin6
#define NUM_LEDS 6 //6 ws2812 LEDS conected
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.
 pinMode(ZVOpen, INPUT_PULLUP); //Der Pin mit dem ZVOpen Anschluss (Pin 8) ist jetzt ein Eingang.
 pinMode(ZVClose, INPUT_PULLUP); //Der Pin mit dem ZVClose Anschluss (Pin 9) ist jetzt ein Eingang.
 Serial.begin(9600);
 strip1.begin();
}

void loop(){

TKStatus=digitalRead(TK); //Hier wird der Pin7 ausgelesen (Befehl:digitalRead).
  //Das Ergebnis wird unter der Variable „TKStatus" mit dem Wert „HIGH" für 5Volt oder „LOW" für 0Volt gespeichert.
 if (TKStatus == LOW)//Verarbeitung: Wenn der Türkontakt geschlossen ist (Das Spannungssignal ist HIGH)
  { //Programmabschnitt des IF-Befehls öffnen.
  strip1.setPixelColor(0, strip1.Color(30,30,30)); // weiss gedimmt      led 1
  strip1.setPixelColor(1, strip1.Color(30,30,30)); // weiss gedimmt      led 2
  strip1.setPixelColor(2, strip1.Color(30,30,30)); // weiss gedimmt      led 3
  strip1.setPixelColor(3, strip1.Color(30,30,30)); // weiss gedimmt      led 4
  strip1.setPixelColor(4, strip1.Color(30,30,30)); // weiss gedimmt      led 5
  strip1.setPixelColor(5, strip1.Color(30,30,30)); // weiss gedimmt      led 6
  strip1.show();
  } //Programmabschnitt des IF-Befehls schließen.
 else if (TKStatus == HIGH)//Verarbeitung: Wenn der Türkontakt offen ist (Das Spannungssignal ist LOW)
   { //Programmabschnitt des IF-Befehls öffnen.
  strip1.setPixelColor(0, strip1.Color(255,255,255)); // weiss hell      led 1
  strip1.setPixelColor(1, strip1.Color(255,255,255)); // weiss hell      led 2
  strip1.setPixelColor(2, strip1.Color(255,255,255)); // weiss hell      led 3
  strip1.setPixelColor(3, strip1.Color(255,255,255)); // weiss hell      led 4
  strip1.setPixelColor(4, strip1.Color(255,255,255)); // weiss hell      led 5
  strip1.setPixelColor(5, strip1.Color(255,255,255)); // weiss hell      led 6
  strip1.show();
  } //Programmabschnitt des IF-Befehls schließen.

// -----------------------------------------------------------------------------------------------

ZVOpenStatus=digitalRead(ZVOpen); // Hier wird der Pin8 ausgelesen (Befehl: digitalRead).
  //Das Ergebnis wird unter der Variable "ZVOpenStatus" mit dem Wert "HIGH" für 5Volt oder "LOW" für 0Volt gespeichert.
if (ZVOpenStatus == LOW) //Verarbeitung: Wenn der ZV Open Impuls erkannt wird (Spannungssignal ist hoch)
    { // if-Schleife wird geöffnet
  strip1.setPixelColor(0, strip1.Color(0,255,0)); // Grün      led 1
  strip1.setPixelColor(1, strip1.Color(0,255,0)); // Grün      led 2
  strip1.setPixelColor(2, strip1.Color(0,255,0)); // Grün      led 3
  strip1.setPixelColor(3, strip1.Color(0,255,0)); // Grün      led 4
  strip1.setPixelColor(4, strip1.Color(0,255,0)); // Grün      led 5
  strip1.setPixelColor(5, strip1.Color(0,255,0)); // Grün      led 6
  strip1.show();
  delay (5000); //und zwar für 5 Sekunden.
    } // if-Schleife wird geschlossen
else if (ZVOpenStatus == HIGH && TKStatus == LOW) //Verarbeitung: Wenn der ZV Open Impuls erkannt wird (Spannungssignal ist hoch)
    { // if-Schleife wird geöffnet  
  strip1.setPixelColor(0, strip1.Color(0,0,0)); // off      led 1
  strip1.setPixelColor(1, strip1.Color(0,0,0)); // off      led 2
  strip1.setPixelColor(2, strip1.Color(0,0,0)); // off      led 3
  strip1.setPixelColor(3, strip1.Color(0,0,0)); // off      led 4
  strip1.setPixelColor(4, strip1.Color(0,0,0)); // off      led 5
  strip1.setPixelColor(5, strip1.Color(0,0,0)); // off      led 6
  strip1.show();
    } // Programmabschnitt des if-Befehls wird geschlossen




TKStatus=digitalRead(TK); //Hier wird der Pin7 ausgelesen (Befehl:digitalRead).
  //Das Ergebnis wird unter der Variable „TKStatus" mit dem Wert „HIGH" für 5Volt oder „LOW" für 0Volt gespeichert.
 if (TKStatus == LOW)//Verarbeitung: Wenn der Türkontakt geschlossen ist (Das Spannungssignal ist HIGH)
  { //Programmabschnitt des IF-Befehls öffnen.
  strip1.setPixelColor(0, strip1.Color(30,30,30)); // weiss gedimmt      led 1
  strip1.setPixelColor(1, strip1.Color(30,30,30)); // weiss gedimmt      led 2
  strip1.setPixelColor(2, strip1.Color(30,30,30)); // weiss gedimmt      led 3
  strip1.setPixelColor(3, strip1.Color(30,30,30)); // weiss gedimmt      led 4
  strip1.setPixelColor(4, strip1.Color(30,30,30)); // weiss gedimmt      led 5
  strip1.setPixelColor(5, strip1.Color(30,30,30)); // weiss gedimmt      led 6
  strip1.show();
  } //Programmabschnitt des IF-Befehls schließen.
 if (TKStatus == HIGH)//Verarbeitung: Wenn der Türkontakt offen ist (Das Spannungssignal ist LOW)
   { //Programmabschnitt des IF-Befehls öffnen.
  strip1.setPixelColor(0, strip1.Color(255,255,255)); // weiss hell      led 1
  strip1.setPixelColor(1, strip1.Color(255,255,255)); // weiss hell      led 2
  strip1.setPixelColor(2, strip1.Color(255,255,255)); // weiss hell      led 3
  strip1.setPixelColor(3, strip1.Color(255,255,255)); // weiss hell      led 4
  strip1.setPixelColor(4, strip1.Color(255,255,255)); // weiss hell      led 5
  strip1.setPixelColor(5, strip1.Color(255,255,255)); // weiss hell      led 6
  strip1.show();
  } //Programmabschnitt des IF-Befehls schließen.
/*
ZVCloseStatus=digitalRead(ZVClose); // Hier wird der Pin9 ausgelesen (Befehl: digitalRead).
  //Das Ergebnis wird unter der Variable "ZVCloseStatus" mit dem Wert "HIGH" für 5Volt oder "LOW" für 0Volt gespeichert.
if (ZVCloseStatus == HIGH) //Verarbeitung: Wenn der ZV Close Impuls erkannt wird (Spannungssignal ist hoch)
    { // if-Schleife wird geöffnet
  strip1.setPixelColor(0, strip1.Color(255,0,0)); // Rot      led 1
  strip1.setPixelColor(1, strip1.Color(255,0,0)); // Rot      led 2
  strip1.setPixelColor(2, strip1.Color(255,0,0)); // Rot      led 3
  strip1.setPixelColor(3, strip1.Color(255,0,0)); // Rot      led 4
  strip1.setPixelColor(4, strip1.Color(255,0,0)); // Rot      led 5
  strip1.setPixelColor(5, strip1.Color(255,0,0)); // Rot      led 6
  strip1.show();
  delay (5000); //und zwar für für 5 Sekunden (5000 Millisekunden).
    } // if-Schleife wird geschlossen
else // ...ansonsten...
    { // Programmabschnitt des else-Befehls wird geöffnet
  strip1.setPixelColor(0, strip1.Color(0,0,0)); // off      led 1
  strip1.setPixelColor(1, strip1.Color(0,0,0)); // off      led 2
  strip1.setPixelColor(2, strip1.Color(0,0,0)); // off      led 3
  strip1.setPixelColor(3, strip1.Color(0,0,0)); // off      led 4
  strip1.setPixelColor(4, strip1.Color(0,0,0)); // off      led 5
  strip1.setPixelColor(5, strip1.Color(0,0,0)); // off      led 6
  strip1.show();
    } // Programmabschnitt des else-Befehls wird geschlossen
    */
}
Langsam ist Präzise und Präzise ist schnell ;)

Viktor93

...

Ach ja.. mir ist klar alle KFZ signale von 12v auf 5v runter schalten mit passendem widerstand.

KFZ Versorgungsspannung ist nominell 12V - real 11- 13,8V (14,6 wie bei meiner alten Renault Kiste)
Mit Widerstand meinst du hoffentlich einen Spannungsteiler und nicht nur einen Widerstand.

Erschwerend gibt's im Auto Spikes bis 100V. Also die Eingänge schützen sonst ist der µC schnell defekt.
Ein 78L05 regelt dir zumindest die schwankende Eingangsspannung aus.

uwefed

Mit einem 78L05 wirst Du nicht weit kommen; gerade mal 1,5 WS2812 kannst Du damit einschalten.
Grüße Uwe

Viktor93

Mit einem 78L05 wirst Du nicht weit kommen; gerade mal 1,5 WS2812 kannst Du damit einschalten.
Grüße Uwe
Nicht als Versorgung sondern um seine 12V Eingänge auf 5V zu bringen. Mit einem geschickt dimensionierten Spannungsteiler geht es auch solange gesichert ist dass bei 11V noch die 3,xxV erreicht werden. Für die LEds muss der User sich extra was überlegen.
Viel mehr Stress machen die Spikes (schreibt einer der im vorigen Jahrtausend schon NE555 als Dimmer für die Innenraumbeleuchtung zerstört hat)

uwefed

Spannungsstabilisatoren eignen sich nicht um signale auf kleinere Spannungen zu bringen!!!

Akropolis

Die 5v hin zu kriegen ist nicht das problem, auch nicht die versorgungsspannung des Arduinos,, die kommt seperat von dem Zigarettenanzünder oder ab Batterie, versorgungsspannung für den arduino und led kann ich mit gewissen bausteinen schützen die es ja zu kaufen gibt.. gibt auch 12v wandler für KFZ. Das kriege ich schon hin...
z.b: https://www.amazon.de/Uniqstore-Converter-Spannungswandler-Konverter-DCCON-C10/dp/B008HYIS3M
oder LM7805 ? "bild" anhang, oder sonstige DC DC Wandler


mir geht es um den Code. vor erst...


würde das ganze dann auch hier teilen und einen Bauplan erstellen falls jemand daran mal auch Interesse hat.
Nach dem ich das ganze im Fahrzeug getestet habe.

Also Türkontakt Spannung kommt bei meinem FZ vom MUT (Multitimer) dort kommen keine Spikes durch,
Das gleiche von den ZV Schliess/öffner Signalen, das ZV Stg ist intern gesichert. Impuls der ZV Steigt innerhalb einer sekunde auf ca 11-12V an.  Das geht dann schon..
Langsam ist Präzise und Präzise ist schnell ;)

uwefed


Akropolis

Wieviele WS2812 willst Du einbauen?
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.
Langsam ist Präzise und Präzise ist schnell ;)

Rentner

Hallo
Was ist mit deinem Testprogramm , du schreibst ohne Erfolge. Was soll das heißen. Was klappt nicht  Klemmte an der schaltlogik so wie du für das vorstellst, oder bekommt du keine Led an



Akropolis

Hallo
Was ist mit deinem Testprogramm , du schreibst ohne Erfolge. Was soll das heißen. Was klappt nicht  Klemmte an der schaltlogik so wie du für das vorstellst, oder bekommt du keine Led an



Hi, das testprogramm durchlief irgendwie alle Variablen selbständig,  egal ob ich an TK ZVOpen und ZVClose  einen Aktivierungs Signal abgebe... alleine die Funktion Weiss/ Weiss Gedimmt funktioniert einwandfrei mit dem TK Signal.. Dier anderen beiden Aktivierungs Kontakte am Ardiono bleiben unbeeindruckt und es durchläuft rot und grün von alleine.. Das liegt wohl noch an der verschachtelung der "if" oder Case befehle.. je nachdem welcher Automat oder Schaltlogik dafür am besten geeignet ist? Das weiss ich ja noch leider nicht und probiere einfach wild drauf los..
Langsam ist Präzise und Präzise ist schnell ;)

Akropolis

neuer versuch mit anderem ansatz.. die steuerung läuft so halb, jedoch noch in falscher folge.

Die Farben Leuchten alle auf.. Weiss hell und gedimmt , Grün und Rot, nur die abfrage der 3 Aktivierungs anschlüsse TK, ZVOpen, und ZVClose stimmt nicht.. wie verkapsle ich das ganze in richtiger reihenfolge und muss ich meine variablen erweitern mit && arithmetik oder ähnlichen befhehlen..?

Code: [Select]
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
int TK=7; //Das Wort „TK Türkontakt" steht jetzt für den Wert 7.
int TKStatus=0; //Das Wort „TKStatus" steht jetzt zunaechst für den Wert 0. Spaeter wird unter dieser Variable gespeichert, ob der Türkontakt geschlossen ist oder nicht.
int ZVOpen=8; //Das Wort „ZVOpen Zentralverriegelungs Impuls oeffnen" steht jetzt für den Wert 8.
int ZVOpenStatus=0; //Das Wort „ZVOpenStatus" steht jetzt zunaechst für den Wert 0. Später wird unter dieser Variable gespeichert, ob der ZV Impuls High oder Low ist.
int ZVClose=9; //Das Wort „ZVClose Zentralverriegelungs Impuls schliessen" steht jetzt für den Wert 9.
int ZVCloseStatus=0; //Das Wort „ZVCloseStatus" steht jetzt zunächst für den Wert 0. Spaeter wird unter dieser Variable gespeichert, ob der ZV Impuls High oder Low ist.

const int LEDFussraum = 6;// LED Fussraum Bel.=Pin6
#define NUM_LEDS 6 //6 ws2812 LEDS conected
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUM_LEDS, LEDFussraum, NEO_GRB + NEO_KHZ800);

enum Phase {WGedimmt, WHell, Rot, Gruen}; // "Namen" fuer die Phasen
Phase LEDFB; // Enthaelt die aktuelle Phase

void setup() {
 pinMode(TK, INPUT_PULLUP); //Der Pin mit dem TK Anschluss (Pin 7) ist jetzt ein Eingang.
 pinMode(ZVOpen, INPUT_PULLUP); //Der Pin mit dem ZVOpen Anschluss (Pin 8) ist jetzt ein Eingang.
 pinMode(ZVClose, INPUT_PULLUP); //Der Pin mit dem ZVClose Anschluss (Pin 9) ist jetzt ein Eingang.
 Serial.begin(9600);
 strip1.begin(); 
}

void loop() {
 TKStatus=digitalRead(TK);
 ZVOpenStatus=digitalRead(ZVOpen);
 ZVCloseStatus=digitalRead(ZVClose);
 
  switch(LEDFB)
  {
    case WGedimmt:
              if (TKStatus == HIGH)
              { strip1.setPixelColor(0, strip1.Color(30,30,30)); // weiss gedimmt      led 1
                strip1.setPixelColor(1, strip1.Color(30,30,30)); // weiss gedimmt      led 2
                strip1.setPixelColor(2, strip1.Color(30,30,30)); // weiss gedimmt      led 3
                strip1.setPixelColor(3, strip1.Color(30,30,30)); // weiss gedimmt      led 4
                strip1.setPixelColor(4, strip1.Color(30,30,30)); // weiss gedimmt      led 5
                strip1.setPixelColor(5, strip1.Color(30,30,30)); // weiss gedimmt      led 6
                strip1.show(); }
              else
              { LEDFB=WHell; }
              break;
    case WHell:
              if (TKStatus == LOW)
              { strip1.setPixelColor(0, strip1.Color(255,255,255)); // weiss hell      led 1
                strip1.setPixelColor(1, strip1.Color(255,255,255)); // weiss hell      led 2
                strip1.setPixelColor(2, strip1.Color(255,255,255)); // weiss hell      led 3
                strip1.setPixelColor(3, strip1.Color(255,255,255)); // weiss hell      led 4
                strip1.setPixelColor(4, strip1.Color(255,255,255)); // weiss hell      led 5
                strip1.setPixelColor(5, strip1.Color(255,255,255)); // weiss hell      led 6
                strip1.show(); }
              else
              { LEDFB=Rot; }
              break;
    case Rot:
              if (ZVCloseStatus == HIGH)
              { strip1.setPixelColor(0, strip1.Color(255,0,0)); // Rot      led 1
                strip1.setPixelColor(1, strip1.Color(255,0,0)); // Rot      led 2
                strip1.setPixelColor(2, strip1.Color(255,0,0)); // Rot      led 3
                strip1.setPixelColor(3, strip1.Color(255,0,0)); // Rot      led 4
                strip1.setPixelColor(4, strip1.Color(255,0,0)); // Rot      led 5
                strip1.setPixelColor(5, strip1.Color(255,0,0)); // Rot      led 6
                strip1.show();}
              else
              { LEDFB=Gruen; }
              break;
    case Gruen:
              if (ZVOpenStatus == HIGH)
              { strip1.setPixelColor(0, strip1.Color(0,255,0)); // Gruen      led 1
                strip1.setPixelColor(1, strip1.Color(0,255,0)); // Gruen      led 2
                strip1.setPixelColor(2, strip1.Color(0,255,0)); // Gruen      led 3
                strip1.setPixelColor(3, strip1.Color(0,255,0)); // Gruen      led 4
                strip1.setPixelColor(4, strip1.Color(0,255,0)); // Gruen      led 5
                strip1.setPixelColor(5, strip1.Color(0,255,0)); // Gruen      led 6
                strip1.show();
                }
              else
              { LEDFB=WGedimmt; }
              break;
  }
}


Edit: hmm das iss wohl auch der falsche ansatz wen ich mir das so überlege.. mit den Cases läuft es ja so jezt, eine schlaufe ab und macht nie genau dass was ich möchte..
Langsam ist Präzise und Präzise ist schnell ;)

uwefed

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.
24 WS2812 weiß brauchen 1,44A; 40 st brauchen 2,4A.
Eine wirkliche momentane Stromersparnis gibt es nicht da die LED mittels PWM angesteuert werden und potentiell alle LED gleichzeitig mit Nennstrom leuchten. Darm muß die Stromquelle den Strom liefern können. Im Durchschnitt verbrauchen auf 50% gedimmte LED schon die Hälfte des Stroms/Leistung aber das heißt nicht daß es nicht momente gibt wo der volle Strom verlangt wird.

Darum muß die 5V stromversorgung auch diese 1,44 bzw 2,4A liefern können.
Darum ist ein 7805 unterdimensioniert (Strom) aber auch weil bei 14V Eingangsspannung und 2,4A ganze 21,6W in Wärme umsetzen würde..

Grüße Uwe

Akropolis

24 WS2812 weiß brauchen 1,44A; 40 st brauchen 2,4A.
Eine wirkliche momentane Stromersparnis gibt es nicht da die LED mittels PWM angesteuert werden und potentiell alle LED gleichzeitig mit Nennstrom leuchten. Darm muß die Stromquelle den Strom liefern können. Im Durchschnitt verbrauchen auf 50% gedimmte LED schon die Hälfte des Stroms/Leistung aber das heißt nicht daß es nicht momente gibt wo der volle Strom verlangt wird.

Darum muß die 5V stromversorgung auch diese 1,44 bzw 2,4A liefern können.
Darum ist ein 7805 unterdimensioniert (Strom) aber auch weil bei 14V Eingangsspannung und 2,4A ganze 21,6W in Wärme umsetzen würde..

Grüße Uwe
Ich habe gerade geschaut was ich mir mal besorgt hatte bei ebay kosten die Bausteine/Modul 5Euro ;) eingansspannung 9-35V DCDC 5V Out 5A damit bin ich gut bedient :)

https://www.banggood.com/de/5pcs-DC-DC-24V-12V-To-5V-5A-25W-Input-Voltage-9-35V-Buck-Step-Down-Power-Module-p-1197239.html?gmcCountry=CH&currency=CHF&cur_warehouse=CN&createTmp=1&utm_source=googleshopping&utm_medium=cpc_union&utm_content=2zou&utm_campaign=ssc-ch-de-all&gclid=Cj0KCQiAxs3gBRDGARIsAO4tqq03KtFHcJ3rM_AH3X_wXHDr9ckYz-1iecPpChwfaCrqdg6UZi0iYOoaAjFrEALw_wcB

wie siehts den mit dem Code aus.. die Hardwaregeschichte iss kein Problem für mich.

Danke jedem für weitere Tipps betreffend Code :)
Langsam ist Präzise und Präzise ist schnell ;)

agmue

Fahrzeugkontakte lassen sich mittels Kleinrelais oder Optokoppler gefahrlos an den Arduino anschließen. Da mechanische Kontakte prellen, vermisse ich Gegenmaßnahmen.

Danke jedem für weitere Tipps betreffend Code :)
Du willst es, Du kriegst es! Aus Faulheit lasse ich die Höflichkeit mal verkümmern.

Code: [Select]
#ifdef __AVR__
#include <avr/power.h>
#endif

Überflüssig.

Code: [Select]
int TK=7; //Das Wort „TK Türkontakt" steht jetzt für den Wert 7.

Das ist eine Konstante: const byte TK=7

Du gibst der Konstanten einen Typ und einen Wert, das ist keine Textersetzung wie bei define!

Code: [Select]
int TKStatus=0;
An oder Aus ist boolean: bool TKStatus=0;

Code: [Select]
                strip1.setPixelColor(0, strip1.Color(30,30,30)); // weiss gedimmt      led 1
                strip1.setPixelColor(1, strip1.Color(30,30,30)); // weiss gedimmt      led 2
                strip1.setPixelColor(2, strip1.Color(30,30,30)); // weiss gedimmt      led 3
                strip1.setPixelColor(3, strip1.Color(30,30,30)); // weiss gedimmt      led 4
                strip1.setPixelColor(4, strip1.Color(30,30,30)); // weiss gedimmt      led 5
                strip1.setPixelColor(5, strip1.Color(30,30,30)); // weiss gedimmt      led 6

Es gibt Schleifen, Du solltest sie nutzen!

Hört sich irgendwie einfacher an, als es zu programmieren währe :/
Da stimme ich Dir zu. Auch ist Deine Festlegung nicht schlüssig.

Mal als Anregung, was in Deine Richtung gehen könnte, einschließlich Verbesserungspotential:

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_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();
  bool verzoegerung = 0;
  byte r, g, b;

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

  farbausgabe(r, g, b);
  if (verzoegerung)
  {
    delay(5000);
    verzoegerung = 0;
  }
}
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Go Up