//======== Deklarasi Library-variabel-konstanta terkait modul TM1637 ========
#include <TM1637Display.h>
#define CLK 10   // deklarasi pin CLK terhubung ke pin 10 Arduino
#define DIO 11   // deklarasi pin DIO terhubung ke pin 11 Arduino
//Inisialisasi library TM1637Display dengan nama display
TM1637Display display(CLK, DIO); //inisialisasi objek "display"

uint8_t data[]={0xff,0xff,0xff,0xff }; //deklarasi var array data[], nyalakan semua
uint8_t blank[]={0x00,0x00,0x00,0x00 };//deklarasi var array blank[], matikan semua
int second, minute, hour;              //deklarasi variabel detik, menit dan jam
int b_second; //menyimpan nilai detik sebelumnya untuk dibanding dg detik saat ini
int jam;      //deklarasi variabel jam menyatukan jam dan menit
bool colonFlag = false; // deklarasi variabel tipe boolean

//======== Deklarasi Library-variabel-konstanta terkait modul DS3231 ========
#include <DS3231.h>
#include <Wire.h>
DS3231 myRTC;   //pendefinisian myRTC menjadi objek dari DS3231
bool century = false; //penanda limpahan 1 abad dimatikan
bool h12Flag;//deklarasi var h12Flag, jika true maka mode jam 12h, jika false mode 24h
bool pmFlag; //deklarasi var pmFlag, jika true maka PM, jika false AM
//------------------------------------------------------------------------------

void setup() {
  //== setting brightness dan clear TM1637
  display.setBrightness(0x0f);   //set kecerahan display
  display.setSegments(data);     //nyalakan semua segmen
  delay(500);
  display.clear();               //matikan semua segmen
  
  //== setting brightness dan clear TM1637, set default jam = 21:30
  Wire.begin();       //aktifkan protokol I2C
  myRTC.setYear(23);  //set tahun = 2023
  myRTC.setMonth(10); //set bulan = 10 (Oktober)
  myRTC.setDate(22);  //set tanggal = 22
  myRTC.setDoW(1);    //set Date of Weak = 1 
  myRTC.setHour(21);  //set jam = 21
  myRTC.setMinute(30);//set menit = 30
  myRTC.setSecond(0); //set detik = 0
  myRTC.setClockMode(false);  // set mode 24h
}

void loop() {
	hour = myRTC.getHour(h12Flag, pmFlag);//baca status Jam beserta kedua flag
	minute = myRTC.getMinute();   //baca status menit
  jam =  (hour*100) + minute ;  //konversi sehingga nilai jam = 2130 
  
  second = myRTC.getSecond();   //baca status detik
  if (b_second != myRTC.getSecond()) { colonFlag =! colonFlag; }
  b_second = myRTC.getSecond();//salin ke b_second

  //tampilkan jam & nyalakan/matikan colon
  if(colonFlag) { display.showNumberDecEx(jam,0x40); } //nyalakan colon
  else { display.showNumberDecEx(jam,0x00); } //matikan colon
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5