int LED = 13;
int OFF = 0;
int ON = 1;
int AUTO = 2;
const int THRESHOLD = 50;
const float GAMMA = 0.7;
const float RL10 = 50;
unsigned long previousMillis = 0;
void setup() {
pinMode(LED, OUTPUT);
pinMode(OFF, INPUT_PULLUP);
pinMode(ON, INPUT_PULLUP);
pinMode(AUTO, INPUT_PULLUP);
}
void loop() {
if (digitalRead(OFF)) {
digitalWrite(LED, LOW);
return;
}
if (digitalRead(ON)) {
digitalWrite(LED, HIGH);
return;
}
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > 300) {
previousMillis = currentMillis;
int analogValue = analogRead(A0);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
if (lux < THRESHOLD) {
digitalWrite(LED, HIGH);
}
else {
digitalWrite(LED, LOW);
}
}
}