#include <LiquidCrystal_I2C.h>
int redLedPin = 13;
int violetLedPin = 12;
int greenLedPin = 11;
int orangeLedPin = 10;
int yellowLedPin = 9;
int whiteLedPin = 3;
int buzzerCount = 0;
int buzzerPin = 4;
int lightSensor = A0;
const float GAMMA = 0.7;
const float LDRRS10 = 50;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void resetVariables() {
buzzerCount = 0;
}
void setup() {
pinMode(redLedPin, OUTPUT);
pinMode(violetLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(orangeLedPin, OUTPUT);
pinMode(yellowLedPin, OUTPUT);
pinMode(whiteLedPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(lightSensor, INPUT);
lcd.init();
lcd.backlight();
}
void loop() {
int val = analogRead(lightSensor);
float v = val / 1024.0 * 5;
float r = 2000 * v / (1 - v / 5);
float lux = pow(LDRRS10 * 1e3 * pow(10, GAMMA) / r, (1 / GAMMA));
lcd.setCursor(0, 0);
lcd.print("Room: ");
if (lux < 50) {
lcd.print(" Dark!");
digitalWrite(redLedPin, HIGH);
digitalWrite(violetLedPin, LOW);
digitalWrite(greenLedPin, LOW);
digitalWrite(orangeLedPin, LOW);
digitalWrite(yellowLedPin, LOW);
if (buzzerCount < 1) {
tone(buzzerPin, 500);
delay(1000);
noTone(buzzerPin);
buzzerCount++;
}
digitalWrite(whiteLedPin, HIGH);
resetVariables();
} else if (lux >= 50 && lux < 300) {
lcd.print(" Low!");
digitalWrite(redLedPin, LOW);
digitalWrite(violetLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
digitalWrite(orangeLedPin, LOW);
digitalWrite(yellowLedPin, LOW);
if (buzzerCount < 1) {
tone(buzzerPin, 1000);
delay(1000);
noTone(buzzerPin);
buzzerCount++;
}
digitalWrite(whiteLedPin, HIGH);
resetVariables();
} else if (lux >= 300 && lux <= 500) {
lcd.print(" Normal");
digitalWrite(redLedPin, LOW);
digitalWrite(violetLedPin, LOW);
digitalWrite(greenLedPin, HIGH);
digitalWrite(orangeLedPin, LOW);
digitalWrite(yellowLedPin, LOW);
digitalWrite(whiteLedPin, LOW);
} else if (lux > 500 && lux <= 1000) {
lcd.print("Bright");
digitalWrite(redLedPin, LOW);
digitalWrite(violetLedPin, LOW);
digitalWrite(greenLedPin, LOW);
digitalWrite(orangeLedPin, HIGH);
digitalWrite(yellowLedPin, LOW);
digitalWrite(whiteLedPin, LOW);
} else {
lcd.print("Outdoor");
digitalWrite(redLedPin, LOW);
digitalWrite(violetLedPin, LOW);
digitalWrite(greenLedPin, LOW);
digitalWrite(orangeLedPin, LOW);
digitalWrite(yellowLedPin, HIGH);
digitalWrite(whiteLedPin, LOW);
}
lcd.setCursor(0, 1);
lcd.print("Lux : ");
lcd.print(lux);
delay(100);
}