LDR programmieren

Hi!

Im Rahmen einer kleinen Projektarbeit möchte ich eine LED über einen LDR (Lichtsensor) steuern. Das LED soll je nach Lichtverhältnisse selbstständig an und aus gehen bzw. blinken.

Folgende Vorstellung (m.H. von switch case):

  • Lichtwert von 0-100 (dunkle Lichtverhältnisse) --> LED an (HIGH)
  • Lichtwert von 101 - 700 (Dämmerung) --> LED blinkt
  • Lichtwert von 701 - 1000 (helle Lichtverhältnisse) --> LED an (LOW)

Wie kann ich das in der Software entsprechend programmieren, sodass die LED nicht ständig hin- und herspringt, wenn die Lichtwerte wie zum Beispiel 100 und 101 nah beieinander liegen.

Da ich ein kompletter Anfänger bin, wäre ich sehr dankbar, wenn mir jemand helfen könnte und Nähere dazu sagen könnte!

Viele Grüße

Anna

anna_bl:

  • Lichtwert von 701 - 1000 (helle Lichtverhältnisse) → LED an (LOW)

Das sollte bestimmt aus heißen.

Damit das nicht flattert, legt man die Ein- und Ausschaltschwelle auseinander, z.B. bei >=105 ein und bei < 100 aus.
Genaueres findest Du, wenn Du nach Hysterese suchst.

Gruß Tommy

Hallo, sieh dir zB mal die If Anweisung und die relationalen Operatoren an.

LG

Man könnte verbotene Bereiche definieren, in denen nicht umschaltet wird und der vorherige Zustand weiterverwendet wird. Z.B. bei Lichtwerten im Bereich 90-110 bleibt man im vorherigen Zustand.

Im Code sieht das ungefähr so aus:

// 0 Nacht
// 1 Daemmerung
// 2 Tag
int zustand = 1;

void updateZustand(){
  int lichtwert = leseLichtwert();
  if(lichtwert < 90) {
    zustand = 0;
  } else if (lichtwert > 110 && lichtwert < 690) {
    zustand = 1;
  } else if (lichtwert > 710) {
    zustand = 2;
  }
}

void loop(){
  updateZustand();
  if (zustand == 0){
    // Code Licht an
  } else if (zustand == 1){
    // Code blinken
  } else if( zustand == 2){
    // Code Licht aus
  }
}

Ein Problem gibts hier aber: Lichtblitze können im verbotenen Bereich Nacht/Dämmerung das Licht ausschalten und es geht erst wieder an, wenn es ganz Dunkel ist.