#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <math.h>
LiquidCrystal_I2C lcd(0x27,16,2);
// -------- PINLER --------
int ldrPin = 34;
int redPin = 25;
int greenPin = 26;
int bluePin = 27;
int buttonPin = 18;
// -------- ZAMAN --------
unsigned long previousMillis = 0;
unsigned long serialMillis = 0;
int interval = 2000;
int screen = 0;
bool lastButtonState = HIGH;
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
pinMode(ldrPin, INPUT);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// -------- FAKE DHT --------
float temp = 24;
float hum = 49;
// -------- GERÇEK LUX HESABI --------
int ldrValue = analogRead(ldrPin);
float voltage = ldrValue / 4095.0;
float lux = pow((1 - voltage) / voltage, 1.4) * 50;
// -------- SERIAL (PDF FORMAT) --------
if (millis() - serialMillis >= 3000) {
serialMillis = millis();
Serial.print("Nem: ");
Serial.print(hum);
Serial.print("% || Sicaklik: ");
Serial.print(temp);
Serial.print("C || Isik: ");
Serial.print(lux);
Serial.println(" lux");
}
// -------- BUTON --------
bool buttonState = digitalRead(buttonPin);
if (buttonState == LOW && lastButtonState == HIGH) {
interval = (interval == 2000) ? 4000 : 2000;
Serial.print("LCD suresi degistirildi: ");
Serial.print(interval / 1000);
Serial.println(" sn");
delay(200);
}
lastButtonState = buttonState;
// -------- LCD --------
if (millis() - previousMillis >= interval) {
previousMillis = millis();
lcd.clear();
// NEM
if (screen == 0) {
lcd.setCursor(0,0);
lcd.print("NEM");
lcd.setCursor(15,0);
lcd.print(interval/1000);
lcd.setCursor(0,1);
lcd.print(hum);
lcd.print(" - ");
lcd.print(hum <= 60 ? "LOW" : "HIGH");
}
// SICAKLIK
else if (screen == 1) {
lcd.setCursor(0,0);
lcd.print("SICAKLIK");
lcd.setCursor(15,0);
lcd.print(interval/1000);
lcd.setCursor(0,1);
lcd.print(temp);
lcd.print(" - ");
if (temp < 0) lcd.print("VERY LOW");
else if (temp <= 30) lcd.print("NORMAL");
else lcd.print("HIGH");
}
// ISIK
else if (screen == 2) {
lcd.setCursor(0,0);
lcd.print("ISIK");
lcd.setCursor(15,0);
lcd.print(interval/1000);
lcd.setCursor(0,1);
if (lux < 10) lcd.print("KARANLIK");
else lcd.print("AYDINLIK");
}
screen = (screen + 1) % 3;
}
// -------- RGB LED (COMMON ANODE) --------
if (lux < 10) {
// KARANLIK → MAVİ
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, HIGH);
digitalWrite(bluePin, LOW);
}
else {
if (temp < 0) {
// VERY LOW → AÇIK MAVİ
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
}
else if (temp <= 30) {
// NORMAL → YEŞİL
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, HIGH);
}
else if (temp <= 40) {
// HIGH → TURUNCU
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, HIGH);
}
else {
// ÇOK YÜKSEK → KIRMIZI
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
digitalWrite(bluePin, HIGH);
}
}
}