#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 long seccolck=0;
unsigned long minclock=0 ;
unsigned int number = 0;
unsigned int tmpnumber1, tmpnumber2, tmpnumber3, tmpnumber4;
unsigned long lastSave1sec = 0;
int status7Seg = 4;
void timer1_callback( void );
void showNumber(int num);
void updateTime();
bool running = true;
unsigned long lastSave500ms =0 ;
bool status_Colon = LOW ;
char c = '1';
unsigned long currentTime = millis();
void setup() {
Serial.begin( 115200 );
Serial.printf( "\nShow Number : %d\n", number);
Serial.printf( "\nDG1:%d DG2:%d DG3:%d DG4:%d\n", tmpnumber1, tmpnumber2, tmpnumber3, tmpnumber4);
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() {
unsigned long currentTime = millis();
if (Serial.available()) {
c = Serial.read();
if (c == '1') {
running = true;
lastSave1sec = millis(); // Reset time when starting
Serial.printf( "\nClock : continue\n");
} else if (c == '2') {
running = false;
Serial.printf( "\nClock : Stop\n");
}
}
if (running) {
if (currentTime - lastSave1sec >= 1000) {
lastSave1sec = currentTime;
seccolck++;
if (seccolck == 60) {
minclock++;
seccolck = 0;
}
updateTime();
Serial.printf( "\n clock %02d : %02d\n",minclock ,seccolck );
}
}
if (currentTime - lastSave1sec >= 1000) {
lastSave1sec = currentTime;
Serial.printf( "\n clock %02d : %02d\n",minclock ,seccolck );
}
if (currentTime - lastSave500ms >= 500) {
lastSave500ms = currentTime;
digitalWrite(DPColon, status_Colon);
if(running == true) {
status_Colon= (!status_Colon) ;
}else{
}
}
}
void updateTime() {
number = (minclock*100)+seccolck ;
tmpnumber1 = number / 1000;
tmpnumber2 = (number - ((tmpnumber1) * 1000)) / 100;
tmpnumber3 = (number - (tmpnumber1 * 1000) - (tmpnumber2 * 100)) / 10;
tmpnumber4 = (number - (tmpnumber1 * 1000) - (tmpnumber2 * 100) - (tmpnumber3 * 10));
}
void timer1_callback( void )
{
showNumber(10);
digitalWrite( DG1, HIGH );
digitalWrite( DG2, HIGH );
digitalWrite( DG3, HIGH );
digitalWrite( DG4, HIGH );
if (status7Seg == 1)
{
showNumber(tmpnumber1);
digitalWrite( DG1, LOW );
digitalWrite( DG2, HIGH );
digitalWrite( DG3, HIGH );
digitalWrite( DG4, HIGH );
status7Seg = 2;
}
else if (status7Seg == 2)
{
showNumber(tmpnumber2);
digitalWrite( DG1, HIGH );
digitalWrite( DG2, LOW);
digitalWrite( DG3, HIGH);
digitalWrite( DG4, HIGH);
status7Seg = 3;
}
else if (status7Seg == 3)
{
showNumber(tmpnumber3);
digitalWrite( DG1, HIGH );
digitalWrite( DG2, HIGH );
digitalWrite( DG3, LOW );
digitalWrite( DG4, HIGH );
status7Seg = 4;
}
else if (status7Seg == 4)
{
showNumber(tmpnumber4);
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, LOW );
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 );
}
}