#include "DHTesp.h"
#include <LiquidCrystal_I2C.h>
#define ldrPin 2
const float gama = 0.7;
const float rl10 = 50;
const int DHT_PIN = 23;
DHTesp dhtSensor;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
lcd.init();
lcd.backlight();
}
void loop() {
// put your main code here, to run repeatedly:
// delay(10); // this speeds up the simulation
int nilaiLDR = analogRead(ldrPin);
nilaiLDR = map(nilaiLDR, 4095, 0, 1024, 0); //mengubah nilai pembacaan sensor LDR dari nilai ADC arduino menjadi nilai ADC ESP32
float voltase = nilaiLDR / 1024.*5;
float resistansi = 2000 * voltase / (1-voltase/5);
float kecerahan = pow(rl10*1e3*pow(10,gama)/resistansi,(1/gama));
Serial.print("Kecerahan = ");
Serial.println(kecerahan);
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
delay(2000); // Wait for a new reading from the sensor (DHT22 has ~0.5Hz sample rate)
lcd.setCursor(0, 0);
lcd.print("Temp: " + String(data.temperature, 2) + " C");
delay(1000);
lcd.clear();
lcd.setCursor(0, 1);
delay(1000);
lcd.clear();
if ((20 <= data.temperature) && (data.temperature <= 24)
&& (30 <= data.humidity) && (data.humidity <= 50)
&& (300 <= kecerahan) && (kecerahan <= 500)) {
lcd.print("OPTIMAL");
}
// JIKA SUHU BERADA DIANTARA 18-20 ATAU 24-26, SERTA KELEMBAPAN DIANTARA 20-30 ATAU 50-60, DAN KECERAHAN
// DIANTARA 200-300 ATAU 500-700 MAKA OUTPUTNYA CUKUP BAIK
else if
(((18 <= data.temperature) && (data.temperature < 20)
|| (24 < data.temperature) && (data.temperature <= 26))
&& ((20 <= data.humidity) && (data.humidity < 30)
|| (50 < data.humidity) && (data.humidity <= 60))
&& ((200 <= kecerahan) && (kecerahan < 300)
|| (500 < kecerahan) && (kecerahan <= 700))) {
lcd.print("CUKUP BAIK");
}
else {
lcd.print("SANGAT TIDAK BAIK");
}
}