#include <LiquidCrystal_I2C.h> //library LCD
#include <RTClib.h> //library Real-Time Clock
#include <DHT.h> //library DHT22
#include <Wire.h>
#define DHTPIN 7 //pin data DHT22 conect ke pin 7 Arduino
#define DHTTYPE DHT22 //jenis sesnor DHT22
//pengaturan kadar air
#define Sensor A0
#define wet 620
#define dry 900
float nilai_sensor; //membaca nilai sensor kadar air analog
float n_akhir; //membaca nilai kadar air yang telah dikalibrasikan
RTC_DS1307 rtc; //set up real time clock
LiquidCrystal_I2C lcd (0x27, 20, 4);
DHT dht (DHTPIN, DHTTYPE); //setup pin dan jenis DHTT ke library
char daysOfTheWeek[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"};
void setup() {
Serial.begin(9600);
Serial.println("Sistem Monitoring Suhu, Kelembaban dan Kadar Air");
lcd.begin(20, 4);
rtc.begin();
Wire.begin();
dht.begin();
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
}
void loop()
{
DateTime now = rtc.now();
//menampilkan waktu di lcd
lcd.setCursor(0,1);
lcd.print("JAM :");
lcd.print(" ");
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
lcd.print(" ");
//menampilkan tanggal di lcd
lcd.setCursor(0,0);
lcd.print("TGL :");
lcd.print(" ");
//lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
lcd.print(" ");
lcd.print(now.day(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.year(), DEC);
lcd.print(" ");
//menampilkan tanggal dan jam secara real-time di serial monitor
Serial.print("Current time: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
float T = dht.readTemperature(); //membaca temperature
float h = dht.readHumidity(); //membaca kelembaban
//menampilkan data suhu di LCD
lcd.setCursor(0,2);
lcd.print("T:");
lcd.print(T,1);
lcd.print(" ");
lcd.print("C");
//menampilkan data kelembaban di LCD
lcd.setCursor(11,2);
lcd.print("H:");
lcd.print(h,1);
lcd.print(" ");
lcd.print("%");
//menampilkan data suhu, kelembaban dan kadar air di serial monitor
Serial.print("Suhu = ");
Serial.print(T);
Serial.print(" C, Kelembaban = ");
Serial.print(h);
Serial.print(" % ");
Serial.print("Nilai Analog = ");//menampilkan nilai analog pada serial monitor
Serial.println(nilai_sensor);
Serial.print("Nilai Kadar Air = ");//menampilkan hasil konversi nilai analog ke persen
Serial.println(n_akhir);
Serial.println();
// Instruksi kadar air untuk mwngubah nilai analog menjadi persen
nilai_sensor = analogRead(A0);
n_akhir = map(analogRead(A0), dry, wet, 0, 100); //Nilai sensor tertinggi, terendah
if (n_akhir >= 100){
n_akhir = 100;
}
else if (n_akhir<0)
{
n_akhir=0;
}
//menampilkan data kadar air di lcd
lcd.setCursor(0,3);
lcd.print("KADAR AIR : ");
lcd.setCursor(11,3);
lcd.print(n_akhir,1);
lcd.print(" % ");
lcd.print("");
delay(3000); //delay waktu selama 3 detik
}