#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <DHT.h>
// Definisikan Sensor Temp & Humid
#define DHTPIN 7 // sambung ke pin mana
#define DHTTYPE DHT22 // menentukan type sensor DHT
DHT dht(DHTPIN, DHTTYPE); //// Inisialisasi sensor DHT
// Definisikan tombol untuk mengubah tampilan dari jam ke temp & humid
const int BUTTON_PIN = 6;
// Membuat variabel sensor
int h; //Menyimpan nilai humidity
int t; //Menyimpan nilai temperature
// Inisialisasi modul rtc
RTC_DS1307 rtc;
// Inisialiasi LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Membuat variabel hari
char daysOfTheWeek[7][12] = {"Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"};
void setup ()
{
// Memulai serial untuk debugging
Serial.begin(9600);
Serial.println("Real Time Clock, Temperature and Humidity Sensor Test");
// pin tombol dengan input pullup atau tombol kembali posisi semula setelah ditekan (HIGH)
pinMode(BUTTON_PIN, INPUT_PULLUP);
// memulai sensor
dht.begin();
// memulai lcd
lcd.begin (16,2);
lcd.backlight(); //menyalakan lampu backlight
// memeriksa RTC tersambung
if (! rtc.begin())
{
lcd.print("Tidak menemukan RTC");
while (1);
}
// memeriksa apakah RTC berfungsi
if (! rtc.isrunning())
{
lcd.print("RTC tidak berfungsi!");
}
}
// variabel untuk megatur status tombol
int lastState = HIGH;
void loop ()
{
DateTime now = rtc.now(); // mengambil waktu dari perangkat
// menampilkan data ke serial monitor
Serial.print("DATE: ");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(" ");
Serial.print(now.day());
Serial.print('/');
Serial.print(now.month());
Serial.print('/');
Serial.print(now.year());
Serial.print(" ");
Serial.print("TIME");
Serial.print(" ");
Serial.print(now.hour());
Serial.print(':');
Serial.print(now.minute());
Serial.print(':');
Serial.println(now.second());
// menampilkan data ke lcd
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("TIME");
lcd.print(" ");
lcd.print(now.hour());
lcd.print(':');
lcd.print(now.minute());
lcd.print(':');
lcd.print(now.second());
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("DATE");
lcd.print(" ");
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
lcd.print(" ");
lcd.print(now.day());
lcd.print('/');
lcd.print(now.month());
lcd.print('/');
lcd.print(now.year());
lcd.print(" ");
//mengatur tombol untuk mengubah tampilan ke temperatur dan humid
int value = digitalRead((BUTTON_PIN));
if (lastState != value) {
lastState = value;
if (value == LOW) {
// Membaca data dan menyimpannya ke variable h (humidity) dan t (temperature)
// Membaca temperature atau humidity membutuhkan waktu sekitar 250 milidetik!
h = dht.readHumidity();
t = dht.readTemperature();
//mencetak nilai temp dan humidity ke serial monitor
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %, Temp: ");
Serial.print(t);
Serial.println(" ° Celsius");
// set cursor ke kolom dan baris (0,0):
// cetak dari 0 ke 9:
lcd.clear();
lcd.setCursor(0, 0);
lcd.println(" Now Temperature ");
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(t);
lcd.print("C"); // LCD tidak bisa pakai simbol derajat
// lcd.setCursor(6, 1);
// lcd.println(now.year());
lcd.setCursor(11, 1);
lcd.print("H:");
lcd.print(h);
lcd.print("%");
delay(2000); //Delay 1 detik.
}
}
delay(1000); // delay agar loop atau iterasi berjalan sesuai waktu detik
}