#include <Wire.h>
#include <RTClib.h>
RTC_DS3231 rtc;
const int digitPins[] = {2, 3, 4, 5}; // Pins untuk mengendalikan digit pada display tujuh segmen
const int segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; // Pins untuk mengendalikan segmen pada display tujuh segmen
void setup() {
Serial.begin(9600);
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
}
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
}
void loop() {
DateTime now = rtc.now();
int hour = now.hour();
int minute = now.minute();
// Mengatur jam dan menit pada display tujuh segmen
displayDigit(hour / 10, 3); // Digit ke-3 (puluhan jam)
displayDigit(hour % 10, 2); // Digit ke-2 (satuan jam)
displayDigit(minute / 10, 1); // Digit ke-1 (puluhan menit)
displayDigit(minute % 10, 0); // Digit ke-0 (satuan menit)
delay(1000); // Delay 1 detik
}
void displayDigit(int digit, int position) {
// Tabel segmen untuk angka 0-9 pada display tujuh segmen
byte segments[] = {B11111100, B01100000, B11011010, B11110010, B01100110, B10110110, B10111110, B11100000, B11111110, B11110110};
// Menonaktifkan semua digit
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], HIGH);
}
// Mengaktifkan digit yang diinginkan
digitalWrite(digitPins[position], LOW);
// Menetapkan konfigurasi segmen untuk angka tertentu
for (int i = 0; i < 8; i++) {
if (bitRead(segments[digit], i)) {
digitalWrite(segmentPins[i], HIGH);
} else {
digitalWrite(segmentPins[i], LOW);
}
}
}