#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
#define DHTPIN 13
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
const int ldrPin = A0;
const float GAMMA = 0.7;
const float RL10 = 50;
float ldrValue = 0;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void setup() {
lcd.init();
lcd.backlight();
Serial.begin(115200);
dht.begin();
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.setCursor(0, 1);
lcd.print("H:");
lcd.setCursor(0, 2);
lcd.print("L:");
}
void loop() {
int analogValue = analogRead(ldrPin);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
ldrValue = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
float illumination = ldrValue * 0.000991;
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
lcd.setCursor(2, 0);
lcd.print(" ");
lcd.setCursor(2, 0);
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(2, 1);
lcd.print(" ");
lcd.setCursor(2, 1);
lcd.print(humidity);
lcd.print("%");
lcd.setCursor(2, 2);
lcd.print(" ");
lcd.setCursor(2, 2);
lcd.print(illumination);
lcd.print("%");
unsigned long time = millis();
log(time, temperature, humidity, illumination);
Serial.println();
delay(500);
}
void log(unsigned long time, float temperature, float humidity, float illumination) {
Serial.print("Time: "); Serial.print(time);
Serial.print("ms; Temperature: "); Serial.print(temperature);
Serial.print("C; Humidity: "); Serial.print(humidity);
Serial.print("%; Illumination: "); Serial.print(illumination);
Serial.print("%.");
}