15 November 2025

K 2: Belajar di Wokwi_Membuat Jam Digital

Arduino Uno, RTC DS1307, dan LCD I2C
Pin Arduino UnoPin RTC DS1307Pin LCD I2CFungsi
GNDGNDGNDGround (Tanah)
5VVCCVCCPower (Daya)
A4 (SDA)SDASDAData I2C
A5 (SCL)SCLSCLClock I2C





B. SKETCH YANG PERLU DIKETIK:

// Sertakan library yang dibutuhkan
#include <Wire.h>
#include <RTClib.h> // Library untuk Real Time Clock (RTC)
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C

// Inisialisasi RTC DS1307
RTC_DS1307 rtc;

// Inisialisasi LCD pada alamat 0x27 untuk layar 16x2.
// Alamat I2C umum untuk LCD adalah 0x27 atau 0x3F. Jika tidak jalan, coba ganti alamatnya.
LiquidCrystal_I2C lcd(0x27, 16, 2); 

void setup() {
  // Inisialisasi komunikasi I2C
  Wire.begin();
  
  // Inisialisasi LCD
  lcd.init();
  lcd.backlight();
  lcd.clear();
  
  // Periksa apakah modul RTC terhubung
  if (! rtc.begin()) {
    lcd.print("RTC tidak ditemukan");
    while (1); // Hentikan program
  }
  
  // Untuk mengatur waktu awal, hapus tanda komentar pada baris di bawah ini 
  // dan unggah *hanya sekali*. Setelah itu, komentar kembali baris tersebut.
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Atur waktu ke waktu kompilasi PC
  
  lcd.print("Jam Digital");
}

void loop() {
  // Ambil waktu saat ini dari RTC
  DateTime now = rtc.now();
  
  // Posisikan kursor di baris kedua, kolom 0 (indeks dimulai dari 0)
  lcd.setCursor(0, 1); 
  
  // Tampilkan waktu dalam format HH:MM:SS
  
  // Jam
  if (now.hour() < 10) lcd.print('0'); // Tambahkan '0' di depan jika jam < 10
  lcd.print(now.hour());
  lcd.print(':');
  
  // Menit
  if (now.minute() < 10) lcd.print('0'); // Tambahkan '0' di depan jika menit < 10
  lcd.print(now.minute());
  lcd.print(':');
  
  // Detik
  if (now.second() < 10) lcd.print('0'); // Tambahkan '0' di depan jika detik < 10
  lcd.print(now.second());
  
  // Tunda selama 1 detik (1000 milidetik) sebelum update berikutnya
  delay(1000);
}