Ich mache ein Projekt, das Umgebungslicht mit einem LDR erfassen muss. Die Idee ist, dass, wenn der Wert des LDR für 3 Sekunden niedrig ist, die LED angeschaltet wird. Auch wenn der Wert dieses LDR wieder höher wird und für 3 Sekunden hoch bleibt, sollte sich die LED ausschalten. So kann ich vermeiden, dass nur eine Wolke oder jemand, der über den Sensor winkt, die LED sofort anschaltet.Wie man eine Zeitverzögerung beim Lesen eines Sensors hinzufügen - arduino
Ich weiß, dass ich die Mühlen() -Funktion hier wie im Blinken ohne Verzögerung Tutorial verwenden kann. Aber es scheint nicht zu arbeiten ....
dies mein Code so weit:
#define ledPin 2
#define ldrPin A0
int daylight = 430;
int night = 150;
int ledState = 0;
int lightState = 0;
const long timeOut = 2000;
unsigned long previousMillis = 0;
unsigned long previousMillis2 = 0;
unsigned long tNow = 0;
void setup() {
// put your setup code here, to run once:
pinMode(ledPin, OUTPUT);
pinMode(ldrPin, INPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
tNow = millis();
int value = analogRead(ldrPin);
switch (lightState) {
case 0:
ledState = 0;
if (value <= 200 && (tNow - previousMillis) >= timeOut)
{
previousMillis = tNow;
lightState = 1;
}
break;
case 1:
ledState = 1;
if (value >= 300 && (tNow - previousMillis2) >= timeOut)
{
previousMillis2 = tNow;
lightState = 0;
}
break;
}
switch (ledState) {
case 0:
digitalWrite(ledPin, LOW);
break;
case 1:
digitalWrite(ledPin, HIGH);
break;
}
Serial.println(value);
Serial.println(ledState);
}