Treppen Beleuchtung mit LED Strips

Um welche Funktionalität geht es denn, die Dir Kopfzerbrechen bereitet? Wie sieht Dein aktueller Sketch aus?

ich habe alles ganz oben reingeschrieben, bin noch kein stück weiter! alles was ich versucht habe hat nichts gebracht egal wo ich eine startet setze aber millis reinschreibe es funktioniert nichts!

Ich glaube, Du willst immer noch irgendwas direkt mit dem Begriff "millis" ersetzen; wenn dem so ist hast Du das Prinzip der Zeitsteuerung noch nicht begriffen.

Du musst Dir für Deinen Ablauf Zeitpunkte merken und dann schauen, ob innerhalb Deiner gesetzten Zeit was passiert. Und genau diese Zeitpunkte liefert die millis. Sonst nix.

Fang doch mal klein an und lass den Stripe nach Auslösen des PIR für 10 sek einschalten.

Ich habe den Beitrag eben erst gesehen… und hätte einen alternativen Vorschlag:

Hole in China LED- Streifen mit ws2812 (5m ca. 30,-) und dazu eine Ultraschallsensor.
Der Ultraschallsensor kann einfach den Abstand von der Person zu einem Ende der Treppe messen und dann nur die entsprechenden LEDs einschalten die dem Abstand entsprechen.

Für diese Lösung mußt du nicht mir MS oder anderen für Anfänger komlizierten Dingen arbeiten.

Du mißt deinen Abstand in cm und sprichst die entsprechende LED an…

Danke!

Also, das ich eine Startzeit, eine wartezeit brauche weis ich aber wo ich das einfügen soll weis ich nicht oder wie ich das schreiben soll! Ich stelle mirdas so vor:

Wenn pir ist high gehen stripe 1-3 an und wenn innerhalb von 30sec kein signal von der Lichtschranke kommt gehtn 3-1 wi der aus; oder wenn ein signal von der Lichtschranke kommt dann wird durchgeschaltet bis 16.

Sagt mal r ob ich mal in textform das gnze verstanden habe!

Und das mit ben ws2812 leds hab ich schon gehört aber da war schon alles in die Stiegen integriert!

Danke

Von Deinem Sketch ausgehend habe ich ein paar Änderungen vorgenommen, die hoffentlich in die Richtung gehen, wie Du Dir das vorgestellt hast. Den Praxistest muß ich Dir überlassen.

const unsigned int speed = 300;    // die Zeit wie schnell die Ausgänge von LOW->HIGH und HIGH->LOW wechseln
const byte inpinLso = 51;
const byte inpinLsu = 50;
const byte inpinPir = 49;
const byte led[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 44, 45, 46, 47 };    // Pin2 - 13 entsprechen led0 - led11, Pin44 - 47 entsprechen led12 - led15
const byte anzahl = sizeof(led);    // Bestimmt die Anzahl aller Pins -> Wichtig für for-schleife
const byte anzahlPirLeds = 3;
const unsigned int nachlaufZeit = speed * anzahl + 3000;
byte aktLedRauf = anzahl, aktLedRunter;
unsigned long aktMillis, anzeigeMillis, nachlaufMillis;
bool aktOben;     // Lichtschranke oben
bool altOben;     // Lichtschranke oben
bool aktUnten;    // Lichtschranke unten
bool altUnten;    // Lichtschranke unten
bool aktPir;      // Bewegungsmelder
bool altPir;      // Bewegungsmelder
bool aktBewegung; // Bewegung aktueller Zustand
bool altBewegung; // Bewegung alter Zustand
byte runter;   // ich gehe runter 0=ausschalten, 1=anschalten
byte rauf;     // ich gehe rauf   0=ausschalten, 1=anschalten, 2=drei anschalten

void setup() {
  pinMode (inpinLso, INPUT_PULLUP);    // Anschluss Pin51 als Eingang Lichtschranke oben
  pinMode (inpinLsu, INPUT_PULLUP);    // Anschluss Pin50 als Eingang Lichtschranke unten
  pinMode (inpinPir, INPUT_PULLUP);    // Anschluss Pin49 als Eingang PIR

  for ( int i = 0; i < anzahl; i++ )    // Deklariert alle "led" als Output
  {
    pinMode ( led[i], OUTPUT );
    digitalWrite ( led[i], LOW );    // Setzt alle "led" auf LOW
  }
  aktPir = digitalRead(inpinPir);      // Anschluss Pin49 als Eingang PIR
  altPir = aktPir;
  aktOben = digitalRead(inpinLso);     // Anschluss Pin51 als Eingang Lichtschranke oben
  altOben = aktOben;
  aktUnten = digitalRead(inpinLsu);    // Anschluss Pin50 als Eingang Lichtschranke unten
  altUnten = aktUnten;
}

void loop() {
  aktMillis = millis();
  aktPir = digitalRead(inpinPir);      // Anschluss Pin49 als Eingang PIR
  aktOben = digitalRead(inpinLso);     // Anschluss Pin51 als Eingang Lichtschranke oben
  aktUnten = digitalRead(inpinLsu);    // Anschluss Pin50 als Eingang Lichtschranke unten
  if (aktPir || aktOben || aktUnten) {
    nachlaufMillis = aktMillis;
    aktBewegung = true;
  }
  if (aktMillis - nachlaufMillis >= nachlaufZeit ) {
    aktBewegung = false;
  }
  if (altBewegung && !aktBewegung) {
    rauf = 0;
    aktLedRauf = 0;
    runter = 0;
    aktLedRunter = anzahl;
  }
  if (!altPir && aktPir && !aktOben && !aktUnten) {
    rauf = 2;
    aktLedRauf = 0;
  }
  if (!altUnten && aktUnten) {
    if (rauf == 0) aktLedRauf = 0;
    if (rauf == 2) aktLedRauf = anzahlPirLeds;
    rauf = 1;
  }
  if (!altOben && aktOben) {
    runter = 1;
    aktLedRunter = anzahl;
  }
  altBewegung = aktBewegung;
  altPir = aktPir;
  altOben = aktOben;
  altUnten = aktUnten;

  if ( aktMillis - anzeigeMillis >= speed ) {
    anzeigeMillis = aktMillis;
    if ((rauf == 2) && (aktLedRauf < anzahlPirLeds)) {
      digitalWrite(led[aktLedRauf], HIGH );
      aktLedRauf++;
    }
    if ((rauf != 2) && (aktLedRauf < anzahl)) {
      if (rauf == 1) digitalWrite(led[aktLedRauf], HIGH);
      if ((rauf == 0) && !aktBewegung) digitalWrite(led[aktLedRauf], LOW);
      aktLedRauf++;
    }
    if (aktLedRunter > 0) {
      aktLedRunter--;
      if (runter == 1) digitalWrite(led[aktLedRunter], HIGH);
      if ((runter == 0) && !aktBewegung) digitalWrite(led[aktLedRunter], LOW);
    }
  }
}

MaHa76:
Hole in China LED- Streifen mit ws2812 (5m ca. 30,-) und dazu eine Ultraschallsensor.

Wenn die LEDs nicht schon verbaut wären, würde ich Dir zustimmen, wobei ich eher zu APA102 tendieren würde, weil die sicherer anzusteuern sind. Da kann man schöne Muster mit machen, dazu gibt es ein anderes Thema, wobei der TO aber noch auf die LEDs wartet. Würde mich freuen, wenn Du Dich da einbringst.

Hinsichtlich der Logik ist es aber recht egal, welche LEDs man verbaut. Die Schwierigkeit liegt in der quasi Gleichzeitigkeit von Mustern.

Danke für die hilfe! Sieht sehr kompliziert aus so am handy display! Das ganze werde ich am abend mal auf meinen testaufbau spielem und mal testen! Danke

Danke agmue!

so ich habe ihn jetzt auf meine testschaltung gespielt und ich muss leider sagen das nur reagiert wird wenn pin50 auf high ist und das wars es geht nichts weiter egal was ich drücke es geht nicht aus auch nicht mit der eingestellten nachlaufzeit!

Kannst du mir Beschreibungen da zugeben denn ich kann es zwar erahnen was du da geschrieben hast aber wissen tu ich nicht bzw lernen kann ich da nicht viel! Danke!

Auf was für einem Arduino läßt Du das denn laufen?

Auf nem mega sonst hab ich nicht soviel pins zur verfügung die pwm können!

Bei mir habe ich das auch auf einem Mega2560 probiert, wollte nur sichergehen. An die Ausgänge habe ich einzelne LEDs, ich habe nur neun, gegen GND gehängt. Die Eingänge sind alle aktiv HIGH. Bei PIR auf HIGH gehen die ersten drei LEDs an. Nach einem Impuls des Sensors unten gehen alle weiteren LEDs an. Bei einem Impuls oben gehen die LEDs unabhängig vom PIR von oben nach unten (16 -> 1) an. Wenn alle Eingänge LOW sind, gehen nach der Nachlaufzeit die LEDs gleichzeitig von oben und unten aus.

So läuft es bei mir ab. Für den seriellen Monitor habe ich noch Testausgaben eingebaut:

 if ( aktMillis - anzeigeMillis >= speed ) {
    anzeigeMillis = aktMillis;
    Serial.print("rauf: "); Serial.print(rauf);
    Serial.print("  aktLedRauf: "); Serial.print(aktLedRauf);
    Serial.print("  runter: "); Serial.print(runter);
    Serial.print("  aktLedRunter: "); Serial.print(aktLedRunter);
    Serial.println();

Eigentlich sollte das bei Dir gemauso funktionieren. :)

Ich glaub ich weis jetzt wo der hacken ist! Den test aufbau hab ich mit tastern gemacht! Also die eingäne 49,50,51 sind im grunde auf LOW erst wenn ich den drücke kommt HIGH! Mein Ls ist so geschaltet das sie ein signal ausgibt wenn sie durchbrochen ist und mit dem steuere ich ein relais an das 5v in den arduino schickt! Ich glaube da liegt der hund begraben!

Füge ich die serielle ausgabe am anfang von loop ein oder ins setup?

Achja an den tastern hab ich jeweils einen pulldown wiederstand gehängt!

Kawaci: Ich glaub ich weis jetzt wo der hacken ist!

Langsam kommt Licht ins Dunkel :)

Kawaci: Füge ich die serielle ausgabe am anfang von loop ein oder ins setup?

Bei mir ist das Zeile 83 hinter

 if ( aktMillis - anzeigeMillis >= speed ) {
    anzeigeMillis = aktMillis;

Danke werd ich gleich umschreiben probieren wenn ich zuhause bin!

es läuft! Danke! Kannst du mir noch sagen wo in diesem Sketch ich die Reihenfolge von den Led's bestimmen kann? ich finde es einfach nicht heraus!

Meinst Du die Definition der Pins?

ja glaube! jetzt laufen die led 1-16 zeit gleich in der Mitte zusammen is einzige was "normal" läuft ist von 16-1 geht das in diesem code überhaupt die Reihenfolge der Leeds anders zu bestimmen?

Dann hier:const byte led[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 44, 45, 46, 47 };    // Pin2 - 13 entsprechen led0 - led11, Pin44 - 47 entsprechen led12 - led15

Das Zusammenlaufen in der Mitte ist eigentlich das Löschen, weil von oben und unten gleichzeitig gelöscht wird. Hast Du da durch die FETs eine Invertierung drin?

Die Art des Löschens ist eine Stylefrage, über die man nochmal nachdenken kann, wenn es grundsätzlich läuft. Zunächst müssen wir dasselbe sehen!

Wir sehen das selbe!

Was meinst mit invertierung bei den FET?