0
私は、LDRで環境光を感知しなければならないプロジェクトを作っています。アイデアは、LDRの値が3秒間低いとLEDが点灯するということです。また、そのLDRの値が再び高くなり、3秒間高い状態を維持すると、LEDが点灯するはずです。これは、センサー上を揺らす雲や誰かがただちに導かれることを避けるためです。センサを読み取るときに時間遅れを追加する方法
私はここに遅延チュートリアルなし点滅のように工場()関数を使用することができることを知っています。しかし、それは
....動作するようには思えない、これはこれまでのところ私のコードです:
#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);
}