#define LED_ON LOW
#define LED_OFF HIGH
#define DG1 23
#define DG2 25
#define DG3 18
#define DG4 14
#define A 32
#define B 13
#define C 5
#define D 22
#define E 19
#define F 33
#define G 27
#define DP 21
#define DPColon 26
hw_timer_t *timer1 = NULL;
unsigned int number = 0;
unsigned int seconds , tens, minutes , hours;
int status7Seg = 1;
int mins = 0;
int secs = 0;
bool statusClock = true;
unsigned long current = 0;
unsigned long last1sec = 0;
unsigned long last500msec = 0;
bool toggleColon = true;
void setup() {
pinMode(DG1, OUTPUT);
pinMode(DG2, OUTPUT);
pinMode(DG3, OUTPUT);
pinMode(DG4, OUTPUT);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(DP, OUTPUT);
pinMode(DPColon, OUTPUT);
hours = number / 1000;
minutes = (number - ((hours)*1000)) / 100;
tens = (number - (hours * 1000) - (minutes * 100)) / 10;
seconds = (number - (hours * 1000) - (minutes * 100) - (tens * 10));
Serial.begin(115200);
pinMode(DG1, OUTPUT);
pinMode(DG2, OUTPUT);
pinMode(DG3, OUTPUT);
pinMode(DG4, OUTPUT);
pinMode(DPColon, OUTPUT);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(DP, OUTPUT);
timer1 = timerBegin(1000000);
timerAttachInterrupt(timer1, &timer1_callback);
timerAlarm(timer1, 10000, true, 0);
}
void loop() {
current = millis();
if(current - last1sec >= 1000){
last1sec = current;
hours = mins / 10;
minutes = (mins - ((hours) * 10)) / 1;
tens = secs / 10;
seconds = (secs - ((tens) * 10)) / 1;
if(statusClock == true){
secs++;
if(secs >= 60){
secs = 0;
mins++;
}
if(mins >= 60){
mins = 0;
}
Serial.printf("Clock Run -> %02d:%02d\n", mins, secs);
}else{
Serial.printf("Clock Stop -> %02d:%02d\n", mins, secs);
}
if(Serial.available() > 0){
String rxuart = Serial.readString();
int rxuartint = rxuart.toInt();
if(rxuartint == 1){
statusClock = true;
Serial.println("Clock Run : " + rxuart);
}else if(rxuartint == 2){
statusClock = false;
Serial.println("Clock Stop : " + rxuart);
}
}
}
if(current - last500msec >= 500){
last500msec = current;
if(statusClock == true){
if(toggleColon == true){
digitalWrite(DPColon, HIGH);
}else{
digitalWrite(DPColon, LOW);
}
toggleColon = !toggleColon;
}
}
}
void timer1_callback(void) {
showNumber(10);
digitalWrite(DG1, HIGH);
digitalWrite(DG2, HIGH);
digitalWrite(DG3, HIGH);
digitalWrite(DG4, HIGH);
if (status7Seg == 1) {
showNumber(hours);
digitalWrite(DG1, LOW); //ให้ติดใส่low
digitalWrite(DG2, HIGH);
digitalWrite(DG3, HIGH);
digitalWrite(DG4, HIGH);
status7Seg = 2;
} else if (status7Seg == 2) {
showNumber(minutes);
digitalWrite(DG1, HIGH);
digitalWrite(DG2, LOW);
digitalWrite(DG3, HIGH);
digitalWrite(DG4, HIGH);
status7Seg = 3;
} else if (status7Seg == 3) {
showNumber(tens);
digitalWrite(DG1, HIGH);
digitalWrite(DG2, HIGH);
digitalWrite(DG3, LOW);
digitalWrite(DG4, HIGH);
status7Seg = 4;
} else if (status7Seg == 4) {
showNumber(seconds);
digitalWrite(DG1, HIGH);
digitalWrite(DG2, HIGH);
digitalWrite(DG3, HIGH);
digitalWrite(DG4, LOW);
status7Seg = 1;
} else {
status7Seg = 1;
}
}
void showNumber(int num) {
if (num == 0) {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
} else if (num == 1) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
} else if (num == 2) {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}else if (num == 3) {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}else if (num == 4) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}else if (num == 5) {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}else if (num == 6) {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}else if (num == 7) {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}else if (num == 8) {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}else if (num == 9) {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}else {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
}