#include <LiquidCrystal.h>
#include "Wire.h"
const int rs = 12, en = 11, d4 = 7, d5 = 6, d6 = 5, d7 = 4;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
//Alamat mencari modul RTC di 0x68
#define DS1307_ADDRESS 0X68
uint8_t clear = 0x00;
void setup() {
Wire.begin();
Serial.begin(9600);
lcd.begin (16, 2);
//Pengaturan tanggal dan waktu
//setDateTime(20, 16, 8, 1, 4, 1, 21);
}
void loop() {
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(clear);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 0X07);
uint8_t seconds = bcdToDec(Wire.read());
uint8_t minutes = bcdToDec(Wire.read());
uint8_t hours = bcdToDec(Wire.read() & 0xff);
uint8_t wday = bcdToDec(Wire.read());
uint8_t mday = bcdToDec(Wire.read());
uint8_t month = bcdToDec(Wire.read());
uint8_t year = bcdToDec(Wire.read());
//Menampilkan data pada display
lcd.setCursor(0,0);
lcd.print(" ");
//Menambahkan nilai 0 (clear) jika jam kurang dari 10
if (hours < 10)
lcd.print("0");
lcd.print(hours);
if (seconds & 1)
lcd.print(":");
else
lcd.print(" ");
//Menambahkan nilai 0 (clear) jika menit kurang dari 10
if (minutes < 10)
lcd.print("0");
lcd.print(minutes);
if (seconds & 1)
lcd.print(":");
else
lcd.print(" ");
if (seconds < 10)
lcd.print("0");
lcd.print(seconds);
lcd.setCursor(1,1);
//Menampilkan nama hari dalam seminggu
switch(wday)
{
case 1: lcd.print("Minggu");
break;
case 2: lcd.print("Senin");
break;
case 3: lcd.print("Selasa");
break;
case 4: lcd.print("Rabu");
break;
case 5: lcd.print("Kamis");
break;
case 6: lcd.print("Jumat");
break;
case 7: lcd.print("Sabtu");
break;
}
lcd.setCursor(8,1);
//Menambahkan nilai 0 (clear) jika hari kurang dari 10
if (mday < 10)
lcd.print("0");
lcd.print(mday);
lcd.print("/");
//Menambahkan nilai 0 (clear) jika bulan kurang dari 10
if (month < 10)
lcd.print("0");
lcd.print(month);
lcd.print("/");
lcd.print(year);
}
//Mengatur tanggal dan waktu pada modul RTC DS1307
void setDateTime(uint8_t seconds, uint8_t minutes, uint8_t hours,
uint8_t wday, uint8_t mday, uint8_t month, uint8_t year)
{
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(clear); //Membersihkan data agar menerima data baru
//Menuliskan nilai tanggal dan waktu
Wire.write(decToBcd(seconds));
Wire.write(decToBcd(minutes));
Wire.write(decToBcd(hours));
Wire.write(decToBcd(wday));
Wire.write(decToBcd(mday));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.write(clear);
Wire.endTransmission();
}
uint8_t decToBcd(uint8_t value)
{
//Desimal ke BCD
return((value/10*16) + (value%10));
}
uint8_t bcdToDec(uint8_t value)
{
return ((value/16*10) + (value%16));
}