////Proyek #21: Jam Digital Sederhana
#include "SevSeg.h"
SevSeg sevseg; //Inisialisasi objek seven segment
int colonpin = A3 ; //pin colon 7-segment
int ledState = LOW; //memyimpan satus led colon pin
unsigned long previousMillis = 0; // menyimpan waktu akhir led updated
const long interval = 1000; // interval kedip colon 1 detik
int button_jam = 14 ;/* PIn A0 sebagai pin digital button up */
int button_menit= 15 ;/* PIn A1 sebagai pin digital button down */
int count_detik = 0;//nilai awal tampilan detik adalah nol
int count_menit = 0;//nilai awal tampilan menit adalah nol
int count_jam = 12;// nilai awal tampilan jam adalah 12
long lastTime, millisTime, deltaTime = 0;
void setup() {
//gunakan pin button sebagai mode input pullup
pinMode (button_jam,INPUT_PULLUP);
pinMode (button_menit,INPUT_PULLUP);
pinMode(colonpin, OUTPUT);
// konfigurasi 7-segment
byte numDigits = 4;//jumlah digir seven segment
byte digitPins[] = {10,11,12,13};//DIG1,DIG2, DIG3,DIG4
byte segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; //A,B, C, D, E, F, G, DP
bool resistorsOnSegments = false; // pilih 'false bila resistor ada di pin digit
byte hardwareConfig = COMMON_ANODE; // gangti tipenya common anoda atau katoda dr 7 segment
bool updateWithDelays = false; // Default 'false' direkomendasikan
bool leadingZeros = false; // Pilih 'true' Jika ingin menmapilkan nol disamping
bool disableDecPoint = false; // pilih 'true' jika pin Dp tidak ada atau tidak dihubungkan
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(95);//atur tingkat kecerahan 7segmen (0-100)
}
void loop() {
set_time();//panggil fungsi set_time
blink_colon(); //panggil blink colon
jam_digital();//panggil fungsi jam_digital
}
void jam_digital(){
if(count_detik > 59){
count_menit++;
count_detik =0;
}
if(count_menit > 59){
count_jam++;
count_menit=0;
}
if (count_jam >23){
count_jam=0;
}
// timer untuk mencounter detik
millisTime = millis();
deltaTime = millisTime-lastTime;
if (deltaTime>1000)
{
count_detik++;
lastTime = millisTime;
}
tampilkan_waktu();
}
void tampilkan_waktu(){
sevseg.setNumber(count_jam * 100 + count_menit);/*tampilakn nilai count*/
sevseg.refreshDisplay(); /* refresh tampilan 7-segment */
}
void set_time(){
//cek penekanan saklar
int val_tombol_menit = digitalRead(button_menit);
int val_tombol_jam =digitalRead(button_jam);
if (val_tombol_menit == LOW){
count_menit++ ;//menit mencacah keatas bertambah 1
delay(200);//delay untuk debounce saklar
}
if (count_menit > 59){
count_menit=0;
}
if (val_tombol_jam == LOW){
count_jam++;//jam mencacah keatas bertambah 1
delay(200); // delay untuk debounce saklar
}
if (count_jam > 23){
count_jam=0;
}
tampilkan_waktu();//panggil fungsi tampilan_waktu
}
void blink_colon(){
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// jika LED off nyalakan dan vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// set the LED variabel ledState :
digitalWrite(colonpin, ledState);
}
}