#include <TimerOne.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int detik = 0, menit = 0, jam = 0, count = 0;
int led1 = 13; // LED utama (kedip setiap 0,5 detik)
int led2 = 12; // LED kedua (kedip setiap 15 detik, mati 1 detik)
int led3 = 11; // LED ketiga (kedip setiap 2 menit, mati 1 detik)
bool led2State = false; // Status LED kedua
bool led3State = false; // Status LED ketiga
bool led2Blinking = false; // Apakah LED kedua sedang berkedip
bool led3Blinking = false; // Apakah LED ketiga sedang berkedip
int led2Timer = 0; // Penghitung waktu untuk LED kedua
int led3Timer = 0; // Penghitung waktu untuk LED ketiga
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(2, 0);
lcd.print("Jam Digital");
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
Timer1.initialize(500000); // 500 ms (1/2 detik)
Timer1.attachInterrupt(detikBlink);
}
void detikBlink() {
// Kedipkan LED1 setiap 0,5 detik
digitalWrite(led1, !digitalRead(led1));
count++;
if (count == 2) { // 2 x 0,5 detik = 1 detik
count = 0;
detik++;
// Atur LED2 untuk berkedip setiap 15 detik
if (detik % 15 == 0 && !led2Blinking) {
led2State = true;
digitalWrite(led2, HIGH);
led2Blinking = true;
led2Timer = 0; // Reset penghitung waktu LED kedua
}
// Atur LED3 untuk berkedip setiap 2 menit
if (menit % 2 == 0 && detik == 0 && !led3Blinking) {
led3State = true;
digitalWrite(led3, HIGH);
led3Blinking = true;
led3Timer = 0; // Reset penghitung waktu LED ketiga
}
// Matikan LED2 setelah 1 detik
if (led2Blinking) {
led2Timer++;
if (led2Timer >= 1) { // 1 detik
led2State = false;
digitalWrite(led2, LOW);
led2Blinking = false;
}
}
// Matikan LED3 setelah 1 detik
if (led3Blinking) {
led3Timer++;
if (led3Timer >= 1) { // 1 detik
led3State = false;
digitalWrite(led3, LOW);
led3Blinking = false;
}
}
// Hitung pergantian waktu
if (detik == 60) {
detik = 0;
menit++;
if (menit == 60) {
menit = 0;
jam++;
if (jam == 24) {
jam = 0;
}
}
}
}
}
void loop() {
// Tampilkan waktu pada LCD
lcd.setCursor(5, 1);
lcd.print(jam);
lcd.setCursor(7, 1);
lcd.print(":");
lcd.setCursor(8, 1);
lcd.print(menit);
lcd.setCursor(10, 1);
lcd.print(":");
lcd.setCursor(11, 1);
lcd.print(detik);
}