#include <SevSeg.h>
#include "Button.h"
#include "Clock.h"
#include "config.h"
const int COLON_PIN = 13; //chân điều khiển đèn chớp của đồng hồ
Clock clock; // Đối tượng đồng hồ để quản lý thời gian.
SevSeg sevseg; // Đối tượng để điều khiển màn hình hiển thị LED 7 đoạn.
//Định nghĩa trạng thái hiển thị của đồng hồ.
enum DisplayState {
DisplayClock,
};
DisplayState displayState = DisplayClock;
//bật hoặc tắt đèn chớp giữa hai chữ số trên màn hình hiển thị thời gian.
void setColon(bool value) {
digitalWrite(COLON_PIN, value ? LOW : HIGH);
}
//hiển thị thời gian hiện tại trên màn hình.
void displayTime() {
DateTime now = clock.now(); //// Lấy thời gian hiện tại từ đồng hồ.
bool blinkState = now.second() % 2 == 0; // Kiểm tra trạng thái nhấp nháy cho đèn chớp giữa hai chữ số.
// Đặt số trên màn hình hiển thị LED 7 đoạn.
// Tính toán giờ và phút để hiển thị số lên màn hình., nhân hour với hàng trăm để có thể hiển thị ở led 7 đoạn đúng vị trí
sevseg.setNumber(now.hour() * 100 + now.minute());
// Bật hoặc tắt đèn chớp giữa hai chữ số bằng cách gọi hàm setColon().
setColon(blinkState);
}
void setup() {
Serial.begin(115200);
clock.begin();
pinMode(COLON_PIN, OUTPUT);
byte digits = 4; // số lương chữ số led 7 đoạn hiển
byte digitPins[] = {2, 3, 4, 5}; // khai báo chân cho led 7 đoạn(4 chân led )
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12}; //khai báo chân cho arduino (chân kết nối đến )
bool resistorsOnSegments = false; //điện trở không kết nối(0 dùng)
bool updateWithDelays = false; // không cập nhật màn hình led
bool leadingZeros = true; // nếu các số < 1000 sẽ có số 0 ở đầu
bool disableDecPoint = true; // vô hiệu hóa dấu thập phân
sevseg.begin(DISPLAY_TYPE, digits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90);
}
void loop() {
//gọi liên tục hàm displayTime để lấy thời gian thực
sevseg.refreshDisplay();
switch (displayState) {
case DisplayClock:
displayTime();
break;
}
}