#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// DHT22 veri pini
#define DHTPIN 15
// DHT22 sensor tipi
#define DHTTYPE DHT22
// LDR analog pini
#define LDR_PIN 34
// RGB LED pinleri
#define RED_PIN 25
#define GREEN_PIN 26
#define BLUE_PIN 27
// Buton pini
#define BUTTON_PIN 18
// DHT nesnesi
DHT dht(DHTPIN, DHTTYPE);
// LCD nesnesi
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Sensor verileri
float sicaklik = 0.0;
float nem = 0.0;
int isikLux = 0;
// LCD gosterim suresi
unsigned long lcdSure = 2000;
// Zaman degiskenleri
unsigned long oncekiLcdZamani = 0;
unsigned long oncekiSeriZamani = 0;
unsigned long oncekiButonZamani = 0;
// LCD sirasi
int ekranSirasi = 0;
// Buton durumu
int sonButonDurumu = HIGH;
// RGB renk ayarlama
void ledRenkAyarla(int r, int g, int b) {
analogWrite(RED_PIN, r);
analogWrite(GREEN_PIN, g);
analogWrite(BLUE_PIN, b);
}
// Nem durumunu belirle
String nemDurumu(float deger) {
if (deger <= 60.0) {
return "LOW";
} else {
return "HIGH";
}
}
// Sicaklik durumunu belirle
String sicaklikDurumu(float deger) {
if (deger < 0.0) {
return "VERY LOW";
} else if (deger <= 30.0) {
return "NORMAL";
} else {
return "HIGH";
}
}
// Isik durumunu belirle
String isikDurumu(int lux) {
if (lux < 10) {
return "KARANLIK";
} else {
return "AYDINLIK";
}
}
// Sensorleri oku
void sensorOku() {
float t = dht.readTemperature();
float h = dht.readHumidity();
if (!isnan(t)) {
sicaklik = t;
}
if (!isnan(h)) {
nem = h;
}
int raw = analogRead(LDR_PIN);
isikLux = map(raw, 0, 4095, 0, 1000);
}
// RGB LED'i guncelle
void rgbGuncelle() {
if (isikLux < 10) {
ledRenkAyarla(0, 0, 255);
} else {
if (sicaklik < 0.0) {
ledRenkAyarla(0, 150, 255);
} else if (sicaklik <= 30.0) {
ledRenkAyarla(0, 255, 0);
} else if (sicaklik <= 40.0) {
ledRenkAyarla(255, 165, 0);
} else {
ledRenkAyarla(255, 0, 0);
}
}
}
// LCD ekrani goster
void lcdGoster() {
lcd.clear();
if (ekranSirasi == 0) {
lcd.setCursor(6, 0);
lcd.print("NEM");
lcd.setCursor(15, 0);
lcd.print(lcdSure / 1000);
String altSatir = String(nem, 2) + "-" + nemDurumu(nem);
lcd.setCursor(0, 1);
lcd.print(altSatir);
}
else if (ekranSirasi == 1) {
lcd.setCursor(4, 0);
lcd.print("SICAKLIK");
lcd.setCursor(15, 0);
lcd.print(lcdSure / 1000);
String altSatir = String(sicaklik, 2) + "-" + sicaklikDurumu(sicaklik);
lcd.setCursor(0, 1);
lcd.print(altSatir);
}
else {
lcd.setCursor(6, 0);
lcd.print("ISIK");
lcd.setCursor(15, 0);
lcd.print(lcdSure / 1000);
lcd.setCursor(0, 1);
lcd.print(isikDurumu(isikLux));
}
}
// Butonu kontrol et
void butonKontrol() {
int butonDurumu = digitalRead(BUTTON_PIN);
if (sonButonDurumu == HIGH && butonDurumu == LOW) {
if (millis() - oncekiButonZamani > 200) {
oncekiButonZamani = millis();
if (lcdSure == 2000) {
lcdSure = 4000;
} else {
lcdSure = 2000;
}
Serial.print("LCD suresi degistirildi: ");
Serial.print(lcdSure / 1000);
Serial.println(" sn");
lcdGoster();
}
}
sonButonDurumu = butonDurumu;
}
void setup() {
Serial.begin(115200);
Wire.begin(21, 22);
dht.begin();
lcd.init();
lcd.backlight();
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LDR_PIN, INPUT);
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
analogReadResolution(12);
sensorOku();
rgbGuncelle();
lcdGoster();
}
// Ana dongu
void loop() {
butonKontrol();
sensorOku();
rgbGuncelle();
if (millis() - oncekiLcdZamani >= lcdSure) {
oncekiLcdZamani = millis();
ekranSirasi = (ekranSirasi + 1) % 3;
lcdGoster();
}
if (millis() - oncekiSeriZamani >= 3000) {
oncekiSeriZamani = millis();
Serial.print("Nem: ");
Serial.print(nem, 2);
Serial.print("% || Sicaklik: ");
Serial.print(sicaklik, 2);
Serial.print("°C || Isik: ");
Serial.print(isikLux);
Serial.println(" lux");
}
}