Kamis, 11 Desember 2014

#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);