Hallo, kann mir jemand bei dem Sketch helfen? Ich bin Arduino Neuling und komme da nicht weiter. Der Arduino soll eine LED einblenden wenn Bewegung erkannt wird und so lange auf vollster Hellichkeit lassen bis keine Bewegung mehr erkannt wird. Wenn keine Bewegung erkannt wird soll die LED wieder langsam ausgeblendet werden. Imomend aber leider ist es so das wenn keine Bewegung erkannt wird die LED voll an geht und sich ausblendet immer und immer wieder. Wenn Bewegung erkannt wird ist es so das die LED eingeblendet wird aber nicht an bleibt die wird immer wieder neu eingeblendet. Wie kann ich das erreichen das die schleifen gestoppt werden?
mfg Karsten
int ledPin=3;
int bewegung=7;
int bewegungsstatus=0;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(bewegung, INPUT);
}
void loop()
{
bewegungsstatus=digitalRead(bewegung);
if (bewegungsstatus == HIGH)
{
for (int helligkeit =1; helligkeit <= 255; helligkeit = helligkeit +1){
analogWrite(ledPin, helligkeit);
delay(20);
}
}
else
{
for (int helligkeit =255; helligkeit >= 0; helligkeit = helligkeit -1){
analogWrite(ledPin, helligkeit);
delay(20);
}
}
}
ist der Bewegungsstatus Low geht er ja immer in die else schleife und dimmt die LED von 255 ab runter.
Vielleicht noch eine Stausvariable benutzen um zu wissen, dass du schon mal in der else Schleife warst und nicht wieder das runterdimmen ausführst.
Grüße
Jörg
gleiche gilt natürlich auf für den Bewegungsstatus High,
ne Variable setzen, dass du schon mal die LED angemacht hast.
Und abprüfen, ob sie gesetzt ist, nur wenn nicht gesetzt, dann dimmen.
und jeweils im anderen Teil, die Variable für den Status wieder löschen.
Hallo danke für die schnelle Antwort, also das heißt dann müsste ich erstmal mit int eine variable erstellen. wo müsste ich dann die hinsetzen in die forschleife? was muss dann da stehen. giebts villeicht irgend eine gute dokumentation?
mfg
Hallo,
sieht nach einer Ablaufsteuerung aus. Für eine Status bzw. Zustandsvariable bietet sich enum an.
Damit haste alles im Klartext wie du es möchtest. Du und dein Programm weiß damit jederzeit wo es sich befindet, was es machen darf und eben auch nicht machen darf.
Google ... "C enum"
Hallo,
ich mache das so, dass ich mit dem PIR Impuls eine Zählervariable setze und parallel die LED auf hell dimme.
Beim Ablauf des Zählers dimme ich die LED wieder dunkel.
uint16_t t_1s_last_pir = 0; // Letzte PIR Erkennung
if (imp_1s && t_1s_last_pir > 0) t_1s_last_pir--;
// --- PIR
imp_pir = 0;
//a_pir_val = analogRead(PIN_PIR);
pir_val = digitalRead(PIN_PIR);
if (pir_val != pir_val_alt) {
if (pir_val) { // EIN
t_1s_last_pir = 30; // Sekunden LED an
imp_pir = 1;
}
pir_val_alt = pir_val;
}
if (imp_pir) {
Serial.println("TRIG PIR");
// Hier LED hell dimmen
}
if (imp_1s && t_1s_last_pir == 1) {
// Hier LED dunkel dimmen
}