#include
#include "RTClib.h"
RTC_DS1307 RTC;
byte pin_digit[] = { 5, 4, 3, 2 };
byte pin_segmen[] = { 8, 6, 12, 10, 9, 7, 13, 11 };
byte angka[] = {
1, 1, 1, 1, 1, 1, 0, 0, // 0
0, 1, 1, 0, 0, 0, 0, 0, // 1
1, 1, 0, 1, 1, 0, 1, 0, // 2
1, 1, 1, 1, 0, 0, 1, 0, // 3
0, 1, 1, 0, 0, 1, 1, 0, // 4
1, 0, 1, 1, 0, 1, 1, 0, // 5
1, 0, 1, 1, 1, 1, 1, 0, // 6
1, 1, 1, 0, 0, 0, 0, 0, // 7
1, 1, 1, 1, 1, 1, 1, 0, // 8
1, 1, 1, 1, 0, 1, 1, 0 // 9
};
int jeda = 1000;
long sblm = 0;
boolean dot = LOW;
byte pin_dot = 14;
byte jam = 0;
byte menit = 0;
byte detik = 0;
byte detik0 = 0;
byte pin_tombol = 15;
void setup() {
Serial.begin(9600);
// init
for (int i=2; i<=14; i++) pinMode(i, OUTPUT);
matikan_semua();
Wire.begin();
RTC.begin();
if (!RTC.isrunning()) {
RTC.adjust(DateTime(__DATE__, __TIME__));
}
void loop() {
baca_waktu();
tulis_waktu();
//digitalWrite(pin_digit[1], HIGH);
//for (int i = 0; i<8; i++) digitalWrite(pin_segmen[i], LOW);
if (digitalRead(pin_tombol)==HIGH && millis()-sblm > jeda) {
RTC.adjust(DateTime(__DATE__, __TIME__));
matikan_semua();
delay(1000);
sblm = millis();
}
void matikan_semua() {
for (int i=0; i<4; i++) digitalWrite(pin_digit[i], LOW);
for (int i=0; i<8; i++) digitalWrite(pin_segmen[i], HIGH);
void baca_waktu() {
if (millis() - sblm > jeda) {
DateTime now = RTC.now();
jam = now.hour();
menit = now.minute();
detik = now.second();
Serial.print(jam);
Serial.print(":");
Serial.println(menit);
/*
if (dot == HIGH) dot = LOW;
else dot = HIGH;
digitalWrite(pin_dot, dot);
*/
sblm = millis();
}
void tulis_waktu() {
// tuliskan jam
if (jam < 10) {
tulis(0, 0);
}
else {
int _jam = jam / 10;
tulis(0, _jam);
}
byte __jam = jam %10;
tulis(1, __jam);
// tuliskan menit
if (menit < 10) {
tulis(2, 0);
}
else {
int _menit = menit / 10;
tulis(2, _menit);
}
tulis(3, menit %10);
void tulis(int d, int a) {
hapus();
//if (digitalRead(pin_digit[d]) == LOW) digitalWrite(pin_digit[d], HIGH);
digitalWrite(pin_digit[d], HIGH);
int idx = a * 8;
for (int i=0; i<8; i++) {
if (angka[idx+i] == 1) digitalWrite(pin_segmen[i], LOW);
else digitalWrite(pin_segmen[i], HIGH);
}
if (detik0 != detik) {
detik0 = detik;
if (dot == true) dot = false; else dot = true;
}
if (d == 1) {
if (dot) {
digitalWrite(pin_segmen[7], HIGH);
digitalWrite(pin_dot, HIGH);
}
else {
digitalWrite(pin_segmen[7], LOW);
digitalWrite(pin_dot, LOW);
}
}
delayMicroseconds(100);
void hapus() {
for (int i=0; i<4; i++) digitalWrite(pin_digit[i], LOW);
for (int i=0; i<8; i++) digitalWrite(pin_segmen[i], HIGH);