#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h> //Libary Keypad
#include "DHT.h"
//DEKLARASI DHT
#define DHTTYPE DHT22 // DHT 11
#define pinDHT 8
DHT dht(pinDHT, DHTTYPE);
//DEKLARASI LCD
LiquidCrystal_I2C lcd(0x27, 20, 4);
//DEKLARASI KEYPAD
const int ROW_NUM = 4; //Deklarasi Baris sebanyak 4 baris
const int COLUMN_NUM = 4; //Deklarasi Kolom sebanyak 4 Kolom
char keys[ROW_NUM][COLUMN_NUM] = { //Deklarasi Array untuk penataan posisi tombol pada keypad
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte pin_rows[ROW_NUM] = {A0, A1, A2, A3}; //Deklarasi Tombol Baris pada masing-masing PIN Arduino
byte pin_column[COLUMN_NUM] = {4, 5, 6, 7}; //Deklarasi Tombol Kolom pada masing-masing PIN Arduino
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); //Deklarasi Keypad
String input_angka;
const String password = "123456";
char key;
int pilihan = 1;
String breakloop;
float temp = 25.1;
int hum = 90;
String inputSP_Temp = "";
String inputSP_Hum = "";
float SP_Temp = 0;
int SP_Hum = 0;
const int pinFan_1 = 9;
const int pinFan_2 = 10;
const int pinFan_3 = 11;
const int pinMist = 12;
const int pinHeater = 13;
int stateMist = 0;
int stateMistBytemp = 0;
int stateMistByhum = 0;
void setup() {
Serial.begin(115200);
dht.begin();
input_angka.reserve(32);
pinMode(pinFan_1, OUTPUT);
pinMode(pinFan_2, OUTPUT);
pinMode(pinFan_3, OUTPUT);
pinMode(pinMist, OUTPUT);
pinMode(pinHeater, OUTPUT);
/*INISIALISASI LCD*/
lcd.init(); //Deklarasi LCD untuk memulai LCD
lcd.clear(); //Membersihkan Layar LCD
lcd.setCursor(0, 0);
lcd.print("--------------------"); //Menampilkan di LCD
lcd.setCursor(0, 1);
lcd.print(" WELCOME ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print("--------------------"); //Menampilkan di LCD
delay(500); //Tunda 500 milidetik
lcd.setCursor(0, 0);
lcd.print("--------------------"); //Menampilkan di LCD
lcd.setCursor(0, 1);
lcd.print(" WELCOME ");
lcd.setCursor(0, 2);
lcd.print(" . ");
lcd.setCursor(0, 3);
lcd.print("--------------------"); //Menampilkan di LCD
delay(500); //Tunda 500 milidetik
lcd.setCursor(0, 0);
lcd.print("--------------------"); //Menampilkan di LCD
lcd.setCursor(0, 1);
lcd.print(" WELCOME ");
lcd.setCursor(0, 2);
lcd.print(" ... ");
lcd.setCursor(0, 3);
lcd.print("--------------------"); //Menampilkan di LCD
delay(500); //Tunda 500 milidetik
lcd.setCursor(0, 0);
lcd.print("--------------------"); //Menampilkan di LCD
lcd.setCursor(0, 1);
lcd.print(" WELCOME ");
lcd.setCursor(0, 2);
lcd.print(" ..... ");
lcd.setCursor(0, 3);
lcd.print("--------------------"); //Menampilkan di LCD
delay(500); //Tunda 500 milidetik
lcd.clear(); //Membersihkan LCD
breakloop = "HOME";
}
void loop() {
HOME();
}
void readSuhu() {
temp = dht.readTemperature();
hum = dht.readHumidity();
}
void HOME(){
while (breakloop == "HOME") {
readSuhu();
/*ALGORITMA HEATER*/
if (temp < SP_Temp) {
digitalWrite(pinHeater, HIGH);
}
else{
digitalWrite(pinHeater, LOW);
}
/*ALGORITMA BLOWER/FAN*/
if (hum > SP_Hum) {
digitalWrite(pinFan_1, HIGH);
digitalWrite(pinFan_2, HIGH);
}
else{
digitalWrite(pinFan_1, LOW);
digitalWrite(pinFan_2, LOW);
}
/*ALGORITMA MIST MAKER*/
if (temp > SP_Temp) {
stateMistBytemp = 1;
}
else{
stateMistBytemp = 0;
}
if (hum < SP_Hum) {
stateMistByhum = 1;
}
else{
stateMistByhum = 0;
}
stateMist = stateMistBytemp + stateMistByhum;
if(stateMist > 0){
digitalWrite(pinMist, HIGH);
}
else{
digitalWrite(pinMist, LOW);
}
/*LCD*/
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(" SP TEMP : "); //Menampilkan di LCD
lcd.print(SP_Temp, 1);
lcd.setCursor(18, 0);
lcd.print((char)223);
lcd.print("C"); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" PV TEMP : "); //Menampilkan di LCD
lcd.print(temp, 1);
lcd.setCursor(18, 1);
lcd.print((char)223);
lcd.print("C"); //Menampilkan di LCD
lcd.setCursor(0, 2); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(" SP HUM : "); //Menampilkan di LCD
lcd.print(SP_Hum, 1);
lcd.setCursor(19, 2);
lcd.print("%"); //Menampilkan di LCD
lcd.setCursor(0, 3); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" PV HUM : "); //Menampilkan di LCD
lcd.print(hum);
lcd.setCursor(19, 3);
lcd.print("%"); //Menampilkan di LCD
key = keypad.getKey();
if (key) { //Jika tombol ditekan
Serial.println(key); //Menampilkan tombol yang ditekan
if (key == '*') { //Jika tombol '*' ditekan
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("--------------------"); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" MASUKAN PASSWORD "); //Menampilkan di LCD
lcd.setCursor(0, 2); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(" UNTUK MENGATUR SP "); //Menampilkan di LCD
lcd.setCursor(0, 3); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("--------------------"); //Menampilkan di LCD
delay(2000);
breakloop = "PASSWORD";
break;
}
}
}
if (breakloop == "PASSWORD") {
input_angka = ""; //Mereset Jawaban
lcd.clear(); //LCD dibersihkan
PASSWORD();
}
}
void PASSWORD(){
while (breakloop == "PASSWORD") {
key = keypad.getKey(); //Deklarasi Key untuk mendapatkan hasil tombol yang ditekan
if (key) { //Jika tombol ditekan
Serial.println(key); //Menampilkan tombol yang ditekan
if (key == '*') { //Jika tombol '*' ditekan
if (input_angka == password) {
Serial.println("PASSWORD BENAR");
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("--------------------"); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" PASSWORD "); //Menampilkan di LCD
lcd.setCursor(0, 2); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(" BENAR! "); //Menampilkan di LCD
lcd.setCursor(0, 3); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("--------------------"); //Menampilkan di LCD
delay(2000);
breakloop = "PENGATURAN";
break;
}
else {
Serial.println("PASSWORD SALAH");
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("--------------------"); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" PASSWORD "); //Menampilkan di LCD
lcd.setCursor(0, 2); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(" SALAH! "); //Menampilkan di LCD
lcd.setCursor(0, 3); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("--------------------"); //Menampilkan di LCD
delay(2000);
breakloop = "HOME";
break;
}
input_angka = ""; //Mereset Password
lcd.clear(); //LCD dibersihkan
}
else if (key == '#') { //Jika tombol 'A' ditekan
lcd.clear();
input_angka = ""; //Mereset Password
}
else { //Jika kondisi diatas tidak adaya ng benar maka ini bekerja
input_angka += key; // Melakukan Input karakter baru pada keypad ketika ditekan
}
}
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("--------------------"); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" MASUKAN PASSWORD "); //Menampilkan di LCD
lcd.setCursor(1, 2); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(input_angka); //Menampilkan di LCD
lcd.setCursor(0, 3); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("--------------------"); //Menampilkan di LCD
}
if (breakloop == "PENGATURAN") {
input_angka = ""; //Mereset Jawaban
lcd.clear(); //LCD dibersihkan
PENGATURAN();
}
else if (breakloop == "HOME") {
input_angka = ""; //Mereset Jawaban
lcd.clear(); //LCD dibersihkan
HOME();
}
}
void PENGATURAN(){
while (breakloop == "PENGATURAN") {
readSuhu();
if (pilihan == 1){
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(">SP TEMP : "); //Menampilkan di LCD
lcd.print(inputSP_Temp);
lcd.setCursor(18, 0);
lcd.print((char)223);
lcd.print("C"); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" PV TEMP : "); //Menampilkan di LCD
lcd.print(temp, 1);
lcd.setCursor(18, 1);
lcd.print((char)223);
lcd.print("C"); //Menampilkan di LCD
lcd.setCursor(0, 2); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(" SP HUM : "); //Menampilkan di LCD
lcd.print(inputSP_Hum);
lcd.setCursor(19, 2);
lcd.print("%"); //Menampilkan di LCD
lcd.setCursor(0, 3); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" PV HUM : "); //Menampilkan di LCD
lcd.print(hum);
lcd.setCursor(19, 3);
lcd.print("%"); //Menampilkan di LCD
}
else if (pilihan == 2){
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(" SP TEMP : "); //Menampilkan di LCD
lcd.print(inputSP_Temp);
lcd.setCursor(18, 0);
lcd.print((char)223);
lcd.print("C"); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" PV TEMP : "); //Menampilkan di LCD
lcd.print(temp, 1);
lcd.setCursor(18, 1);
lcd.print((char)223);
lcd.print("C"); //Menampilkan di LCD
lcd.setCursor(0, 2); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(">SP HUM : "); //Menampilkan di LCD
lcd.print(inputSP_Hum);
lcd.setCursor(19, 2);
lcd.print("%"); //Menampilkan di LCD
lcd.setCursor(0, 3); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" PV HUM : "); //Menampilkan di LCD
lcd.print(hum);
lcd.setCursor(19, 3);
lcd.print("%"); //Menampilkan di LCD
}
key = keypad.getKey(); //Deklarasi Key untuk mendapatkan hasil tombol yang ditekan
if (key) { //Jika tombol ditekan
Serial.println(key); //Menampilkan tombol yang ditekan
if (key == 'A') { //Jika tombol '*' ditekan
pilihan = 1;
}
else if (key == 'B') { //Jika tombol 'B' ditekan
pilihan = 2;
}
else if (key == '*') { //Jika tombol '*' ditekan
SP_Temp = inputSP_Temp.toFloat();
SP_Hum = inputSP_Hum.toFloat();
lcd.clear();
lcd.setCursor(0, 0); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print("--------------------"); //Menampilkan di LCD
lcd.setCursor(0, 1); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print(" SETPOINT "); //Menampilkan di LCD
lcd.setCursor(0, 2); //Mengatur Cursor pada Baris 1 dan kolom 1
lcd.print(" TERSIMPAN! "); //Menampilkan di LCD
lcd.setCursor(0, 3); //Mengatur Cursor pada Baris 1 dan kolom 2
lcd.print("--------------------"); //Menampilkan di LCD
delay(2000);
breakloop = "HOME";
break;
}
else if (key == '#') { //Jika tombol 'A' ditekan
if(pilihan == 1){
lcd.clear();
inputSP_Temp = ""; //Mereset Password
}
else if(pilihan == 2){
lcd.clear();
inputSP_Hum = ""; //Mereset Password
}
}
else { //Jika kondisi diatas tidak adaya ng benar maka ini bekerja
if(pilihan == 1){
inputSP_Temp += key;
}
else if(pilihan == 2){
inputSP_Hum += key;
}
}
}
}
if (breakloop == "HOME") {
input_angka = ""; //Mereset Jawaban
lcd.clear(); //LCD dibersihkan
HOME();
}
}