#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4);
float temperature;
float humidity;
int Sensor_ldr;
int ldr = A0;
int buttonpin = 3;
int buttonState = 0;
boolean chk_btn = true ;
int Relay1 = 4;
int Relay2 = 5;
int led = 7;
const float GAMMA = 0.7;
const float RL10 = 50;
float voltage ;
float resistance;
int lux ;
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
dht.begin();
lcd.setCursor(1, 0);
lcd.print("Hello, BKK!");
delay(1000);
pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
pinMode(buttonpin, INPUT);
pinMode(led, OUTPUT);
lcd.clear();
}
void loop() {
button_press();
Read_temp();
Read_ldr();
Monitor_lcd();
}
void button_press(){
buttonState = digitalRead( buttonpin);
if (buttonState == 0 && chk_btn ) {
chk_btn = false ;
}
else if (buttonState == 0 && chk_btn == false) {
chk_btn = true ;
}
else if (buttonState == 1 && chk_btn == false) {
Serial.println("on");
digitalWrite(led, HIGH);
}
else if (buttonState == 1 && chk_btn ) {
Serial.println("off");
digitalWrite(led, LOW);
}
// Delay a little bit to avoid bouncing
delay(100);
}
void Read_ldr(){
Sensor_ldr = analogRead(ldr);
voltage = Sensor_ldr / 1024. * 5;
resistance = 2000 * voltage / (1 - voltage / 5);
lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
if (lux >= 600){
digitalWrite(Relay2, HIGH);
}
else {
digitalWrite(Relay2, LOW);
}
}
void Read_temp(){
temperature = dht.readTemperature();
humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
delay(500);
if (temperature >= 40){
digitalWrite(Relay1, HIGH);
}
else {
digitalWrite(Relay1, LOW);
}
}
void Monitor_lcd(){
lcd.setCursor(1, 0); lcd.print("Temp : ");
lcd.setCursor(8, 0); lcd.print(temperature);
lcd.setCursor(14, 0); lcd.print("*C");
lcd.setCursor(1, 1); lcd.print("Ldr : ");
lcd.setCursor(7, 1); lcd.print( " ");
lcd.setCursor(7, 1); lcd.print( lux);
lcd.setCursor(13, 1); lcd.print("lux");
}