2016-03-21 33 views
0

LDR ile ortam ışığını algılaması gereken bir proje yapıyorum. Fikir şu ki, LDR değeri 3 saniye düşük olduğunda, led yanar. Ayrıca, bu LDR'nin değeri tekrar yükseldiğinde ve 3 saniye boyunca yüksek kaldığında, led dönmelidir. Bu yüzden, sadece bir bulutun veya sensörün üzerinde sallanan birinin hemen ışığı yakmasını önleyebilirim.Sensör okunurken zaman gecikmesi nasıl eklenir - arduino

Değirmenler() işlevini, gecikme öğreticisi olmaksızın göz kırpmada olduğu gibi kullanabileceğimi biliyorum. Ama bu defa benim kodudur

.... çalışmak görünmüyor:

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


} 

cevap

0

Sen sensörden bir hareketli ortalamasını okumaya yumuşatma kullanarak deneyebilirsiniz. Bu şekilde anında bir değer yerine düzgün bir ortalamaya sahip olacaksınız, bu nedenle pencereyi yeterince uzun tuttuğunuzda kısa bir başak (bir el gibi) değeri değiştirmeyecektir.

Bunun nasıl yapılacağını açıklayan bir tutorial on the arduino website var. Temel olarak birden çok önceki değeri saklar ve ortalama kaydını tutarsınız.