Vielleicht kann mir jemand etwas unter die Arme greifen.
Ich habe vor ein LED-Strip in Verbindung mit einem PIR (auch LDR) zu schalten.
PIR erkennt Bewegung
LED-Strip geht an (Dimmt langsam hoch)
LED-Strip bleibt an solange Bewegung
-PIR erkennt keine Bewegung mehr
-LED-Strip bleibt noch etwas an (z.B. 20 sek.)
-LED-Strip dimmt langsam nach unten (aber noch nicht ganz aus!)
-LED-Strip bleibt für ca. 5 Sek in der gedimmten Einstellung
-LED-Strip geht dann aus-
Problem:
Wie bekomme ich es denn hin, dass der LED-Strip wieder hochdimmt,wenn er in der Phase wo er runterdimmt bzw. verhält, sobald der PIR in dieser Zeit wieder eine Bewegung erkennt ?
Könnte mir da jemand Programmtechnisch etwas helfen ??
Wo bleibt dein Ansatz? Wenn dir garnichts einfällt, fange erst mit den Basics an. Wichtig für das Hochdimmen wird das Verständniss von BlinkWithoutDelay sein!!
Da fällt mir delay(20) ein. Das sorgt dafür, dass von 0 .. 255 (100%) ca. 5 sec vergehen. Und wenn
PIR - Signale mindestens 20 ms lang anstehen, spricht nichts dagegen, loop() so langsam laufen zu lassen.
[Nachtrag:] (Damit es klar ist:) Mit millis() und ungebremster loop ist es aber auf Dauer einfacher.
... in der Phase wo er ...
Genau so: merk dir, in welcher Phase du grade bist, und spare nicht an verschiedenen Zuständen.
Bisher noch nicht den LDR eigebunden (Natürlich nicht für die Bewegung !!! PIR erst Abends !)
Auf dem Breadboard steckt ein TIP122 der den LED-Strip bedient....
Der Code oben funktioniert auch schon .... bis auf die Tatsache, dass ich gerne in der Zeit wo er runterdimmt bei Bewegung wieder hochdimmen soll
tazzie:
Der Code oben funktioniert auch schon .... bis auf die Tatsache, dass ich gerne in der Zeit wo er runterdimmt bei Bewegung wieder hochdimmen soll
Genau das ist der Grund, wieso du dir dringend BlinkWithoutDelay anschauen sollst. Die Schleifen blockieren deinen loop-Durchlauf.
Des weiteren kannst du die Verschachtelung einfacher aufbauen.
if(bewegungsstatus) {
switch(LEDstatus) {
case 0:
break;
...
}
In "meinem" Sktech sind so zusagen zwei komponetten einmal die Bewegungserkennung. Die setzt dann den PWM Zielwert hoch egal wann auch wenn er am runterdimmen ist und nach einer Zeit von 60s runter. Es wird nur gedimmt wenn der Aktuelle Wert anders ist als der aktuelle. Im Moment sind zwei Werte hinterlegt "Hell" und "Dunkel" du musst nur noch anpassen wann der Wert auf "Aus" PWMVal=0 gehen soll.
Du müsstest in den Sketch nur noch einen Wert reinbringen der wenn länger als die Zeit der letzten Bewegungerkennund + Zeit auf nirdrigem PWM Wert halten den PWM Wert auf Null setzt.
Wie schulte schon sagte dein Sketch blockiert sich selber wenn er dimmt das muss nach dem "Blink witout delay"-Prinzip anpassen (was in meinem geposteteten Sketch schon vorhanden ist).
Fertige Sketche auf anfrage werden hier nur von Jurs gepostet. Das ist aber ja auch nicht ganz Sinn der Sache eher Hilfe zu Selbsthilfe.
Gruß
DerDani