Я делаю проект, который должен воспринимать окружающий свет с помощью LDR. Идея состоит в том, что когда значение LDR низкое в течение 3 секунд, включается светодиод. Также, когда значение этого LDR снова становится выше и остается высоким в течение 3 секунд, светодиод должен загореться. Это сделано для того, чтобы я мог избежать того, что просто облако или кто-то, машущий рукой над датчиком, немедленно включит светодиод.
Я знаю, что здесь можно использовать функцию mills(), как в учебнике по миганию без задержки. Но похоже не работает....
это мой код до сих пор:
#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);
}