Go Down

Topic: LED faden mit bewegungssensor (Read 167 times) previous topic - next topic

karsten1310



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

Code: [Select]
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);
}
}
}



Joerg_L

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

Joerg_L

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.

karsten1310

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

Doc_Arduino

#4
Aug 13, 2017, 12:41 am Last Edit: Aug 13, 2017, 12:42 am by Doc_Arduino
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"

Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Mardetuino

#5
Aug 13, 2017, 09:32 am Last Edit: Aug 13, 2017, 02:56 pm by Mardetuino
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.


Code: [Select]

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
}

Go Up