#include <Wire.h> // Library komunikasi I2c
#include <LiquidCrystal_I2C.h> // Library LCD
#include <DHT.h> // Library DHT
#include <Keypad.h> // Library keypad
// Definisi nomor pin
#define soil_sensor A0 //Sensor tanah
#define rain_sensor A1 //Sensor hujan
#define btn 1 //Button
#define pompa 2 //Relay
#define led 13 //LED merah
#define bzr 3 //Buzzzer
const byte ROWS = 4; //Jumlah baris keypad
const byte COLS = 4; //Jumlah kolom keypad
char keys[ROWS][COLS] = { //Layout tombol pada keypad
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {12, 11, 10, 9}; // Pin baris keypad
byte colPins[COLS] = {8, 7, 6, 5}; // Pin kolom keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define DHTTYPE DHT22
#define DHTPIN 4
DHT dht(DHTPIN, DHTTYPE);
bool sistem = false;
bool otentikasi = false;
String enteredPIN = "";
const String correctPIN = "1234";
void setup() {
pinMode(pompa, OUTPUT);
pinMode(led, OUTPUT);
pinMode(btn, INPUT_PULLUP);
pinMode(bzr, OUTPUT);
lcd.begin(16, 2);
lcd.backlight();
dht.begin();
Serial.begin(9600);
}
void loop() {
if (digitalRead(btn) == LOW && !sistem) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Booting...");
for (int i = 0; i < 5; i++) {
digitalWrite(led, HIGH);
digitalWrite(bzr, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
}
digitalWrite(bzr, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Masukkan PIN:");
sistem = true;
}
if (sistem && !otentikasi) {
char key = keypad.getKey();
if (key) {
if (key == '#') {
if (enteredPIN == correctPIN) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Akses diterima");
delay(2000);
lcd.clear();
otentikasi = true;
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PIN salah!");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Masukkan PIN:");
enteredPIN = "";
}
} else if (key == '*') {
enteredPIN = "";
lcd.setCursor(0, 1);
lcd.print(" ");
} else {
enteredPIN += key;
lcd.setCursor(0, 1);
lcd.print(enteredPIN);
}
}
}
if (sistem && otentikasi) {
// Membaca nilai sensor
float suhu = dht.readTemperature();
float kelembapanUdara = dht.readHumidity();
int kelembapanTanah = analogRead(soil_sensor);
int hujan = analogRead(rain_sensor);
// Menampilkan data di LCD
lcd.setCursor(0, 0);
lcd.print("Suhu:");
lcd.print(suhu);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Hum:");
lcd.print(kelembapanUdara);
lcd.print("%");
// Logika kontrol pompa dan LED
if (kelembapanTanah < 500 && hujan > 500) {
digitalWrite(bzr, HIGH);
delay(500);
digitalWrite(bzr, LOW);
digitalWrite(led, HIGH);
digitalWrite(pompa, HIGH);
} else{
digitalWrite(led, LOW);
digitalWrite(pompa, LOW);
}
// Mematikan sistem dengan tombol
if (digitalRead(btn) == LOW) {
digitalWrite(bzr, HIGH);
delay(1000);
digitalWrite(bzr, LOW);
// Matikan semua komponen
digitalWrite(led, LOW);
digitalWrite(pompa, LOW);
sistem = false;
otentikasi = false;
lcd.clear();
}
//Menampilkan nilai kelembapan tanah dan hujan ke serial monitor
Serial.print("Tanah: ");
Serial.println(kelembapanTanah);
Serial.print("Hujan: ");
Serial.println(hujan);
delay(1000); // Delay untuk pembacaan berikutnya
}
}