Einschaltverzögerung

Hallo,

ich habe einen Analogen Wert dessen Bereich ich wie folgt abfrage:

if (val>=320 && val<=486)
digitalWrite(led3,HIGH);
delay(100);
}
else{
digitalWrite(led3,LOW);
}

Wie ist das möglich, die Abfrage so zu machen, das sie wenn der Wert übereinstimmt erst nach ein paar millisekunden erfüllt wird?
Ich möchte so kurzzeitige Schwankungen ausschließen.

Dank im voraus
Ralf

Na einfach nach ein paar ms nochmal abfragen. Sind beide werte im limit, dann weiter.

Einfach nach ein paar ms nochmal abfragen würde ich nicht, so kannst Du keine Schwankungen ausschließen. Es könnte ja sein, dass der Wert gerade in den zwei Momenten passt und ansonsten nicht.

Mein Vorschlag:

unsigned long zeit;
boolean check;
if (val >= 320 && val <= 486)
{
  check = true;
  zeit = millis();
  while (millis() - zeit < 250)
  {
    if (val < 320 || val > 486)
      check = false;
  }
}
else
  check = false;
if (check)
{
  digitalWrite(led3,HIGH);
  delay(100); 
}
else
  digitalWrite(led3,LOW);

Ungetestet, bin gerade auf dem Sprung in die Arbeit. Sollte aber so funktionieren.

Ich würde den Wert vom analogen Eingang 10 mal hintereinander lesen und dann den Mittelwert machen und diesen kontrollieren. Grüße Uwe

Oder die Sparversion davon, sollte bei dem Wertebereich eigentlich aber auch gut funktionieren:

int valbuffer;

setup() {
  ... // val ein Mal einlesen
  valbuffer = val; // Puffervariable initialisieren...
}

loop() {
  ... // val einlesen
  valbuffer = valbuffer * .9 + val * .1; // So gleicht sich valbuffer langsam an val an und gleicht schnelle Schwankungen aus
  if (valbuffer>=320 && valbuffer<=486)
  ...