#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define relay1 25
#define relay2 26
#define relay3 27
#define DHTPIN 14
#define DHTTYPE DHT22
int mode = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27 (from DIYables LCD), 16 column and 2 rows
DHT dht(DHTPIN, DHTTYPE);
void setup(){
Serial.begin(9600);
dht.begin(); // initialize the sensor
lcd.init(); // initialize the lcd
lcd.backlight(); // open the backlight
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
nyala_awal ();
delay (1000);
lcd.setCursor(0,0);
lcd.print("Pilih Mode :");
lcd.setCursor(0,1);
lcd.print("1.auto 2.manual");
while (!Serial.available()) {
// Tunggu sampai ada data yang tersedia di buffer serial
}
char data = Serial.read();
if (data == '1'){
mode = 1;
Serial.println("Masuk ke mode otomatis");
} else if (data == '2'){
mode = 2;
Serial.println("Masuk ke mode manual");
}
lcd.clear();
if (mode == 1){
otomatis();
} else if (mode == 2){
manual();
}
lcd.clear();
}
void loop(){
delay(100);
// PEMBACAAN SUHU
int tempC = dht.readTemperature(); // read temperature
lcd.setCursor(0, 0); // start to print at the first row
lcd.print("Temp: ");
lcd.print(tempC); // print the temperature
lcd.print((char)223); // print ° character
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("FAN : ");
if (mode == 1){
otomatis();
} else if (mode == 2){
manual();
}
}
void manual (){
if (Serial.available () > 0){
char state = Serial.read();
if (state == '1'){
digitalWrite(relay1, HIGH);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
lcd.setCursor(0,1);
lcd.print("FAN : ");
lcd.println("1");
}
else if (state == '2'){
digitalWrite(relay1, LOW);
digitalWrite(relay2, HIGH);
digitalWrite(relay3, LOW);
lcd.setCursor(0,1);
lcd.print("FAN : ");
lcd.println("2");
}
else if(state == '3'){
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, HIGH);
lcd.setCursor(0,1);
lcd.print("FAN : ");
lcd.println("3");
}
else if (state == '4'){
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
lcd.setCursor(0,1);
lcd.print("FAN : ");
lcd.println("OFF");
}
}
}
void otomatis (){
lcd.clear();
int tempC = dht.readTemperature(); // read temperature
lcd.setCursor(0, 0); // start to print at the first row
lcd.print("Temp: ");
lcd.print(tempC); // print the temperature
lcd.print((char)223); // print ° character
lcd.print("C");
// check if any reads failed
if (isnan(tempC)) {
lcd.setCursor(0, 0);
lcd.print("Failed");
} else if (tempC <= 28){
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
lcd.setCursor(0,1);
lcd.print("FAN : ");
lcd.println("OFF");
} else if (tempC >= 28 && tempC <= 31) {
digitalWrite(relay1, HIGH);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
lcd.setCursor(0,1);
lcd.print("FAN : ");
lcd.println("1");
} else if (tempC >= 31 && tempC <= 34) {
digitalWrite(relay1, LOW);
digitalWrite(relay2, HIGH);
digitalWrite(relay3, LOW);
lcd.setCursor(0,1);
lcd.print("FAN : ");
lcd.println("2");
}
else if (tempC >= 34) {
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, HIGH);
lcd.setCursor(0,1);
lcd.print("FAN : ");
lcd.println("3");
}
}
void nyala_awal () {
int tempC = dht.readTemperature(); // read temperature
lcd.setCursor(0, 0); // start to print at the first row
lcd.print("Temp: ");
lcd.print(tempC); // print the temperature
lcd.print((char)223); // print ° character
lcd.print("C");
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
lcd.setCursor(0,1);
lcd.print("FAN : ");
lcd.println("READY");
}