2016-03-21 4 views
0

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); 


} 

Antwort

0

Sie könnten versuchen, Glätten mit einem laufenden Mittelwert von dem Sensor zu lesen. Auf diese Weise haben Sie einen geglätteten Durchschnitt anstelle eines unmittelbaren Werts, so dass eine kurze Spitze (wie eine Hand) den Wert nicht ändert, wenn Sie das Fenster lange genug halten.

Es gibt eine tutorial on the arduino website, die erklärt, wie man das macht. Grundsätzlich speichern Sie mehrere vorherige Werte und behalten den Durchschnitt im Auge.

Verwandte Themen