#define off 1
#define on 0
#define don 1
#define doff 0
int a=12,b=13,c=7,d=8,e=9,f=11,g=10,dp=6; //pins to activate segment
int dis1=5,dis2=4,dis3=3,dis4=2; //enable pins for display(anode type display used
int button_1=A0; //for updating hour
int button_2=A1; //for updating second
int button_3=A2; //for updating minute
int Hour_T =0,Hour_O=0,minute_T=0,minute_O=0;
int A_hour=0,A_minute=0,A_second=0,psec=0;
unsigned long current_time,previous_time;
int interval=1000;
//refresh rate of display and button
int button_R=150;
int display_R=2; //adjust display refresh according to your need
unsigned long c_time=0,p_time=0,cc_time=0,p_button_time=0;
void setup() {
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(dis1,OUTPUT);
pinMode(dis2,OUTPUT);
pinMode(dis3,OUTPUT);
pinMode(dis4,OUTPUT);
pinMode(button_1,INPUT_PULLUP);
pinMode(button_2,INPUT_PULLUP);
pinMode(button_3,INPUT_PULLUP);
}
void loop() {
run_clock();
}
void time_count()
{current_time=millis();
if(current_time-previous_time>=interval)
{previous_time=current_time;
++A_second;
}
if(A_second==60)
{A_second=0;
++A_minute;}
if(A_minute==60)
{A_minute=0;
++A_hour;}
if(A_hour==13)
{A_hour=1;
}
if(psec!=A_second)
{psec=A_second;
if(digitalRead(dp)==0)
{digitalWrite(dp,1);}
else
{
digitalWrite(dp,0);
}
}
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
void run_clock()
{time_count();
button_p();
convert_time(A_hour,A_minute);
displayd();
}
/////////////////////////////////////////////////////
void button_p()
{cc_time=millis();
if(cc_time-p_button_time>=button_R)
{ p_button_time=cc_time;
if(digitalRead(button_1)==0){A_hour++;}
if(digitalRead(button_2)==0){A_second=0;}
if(digitalRead(button_3)==0){A_minute++;}
}
}
/////////////////////////////////////////////////////
void convert_time(int h,int m)
{
Hour_T=h/10;
Hour_O=h%10;
minute_T=m/10;
minute_O=m%10;
}
/////////////////////////////////////////////////////
void displayd()
{
c_time=millis();
if(c_time-p_time>=display_R*1 &&c_time-p_time<display_R*2)
{display_hourT();}
else if(c_time-p_time>=display_R*2&&c_time-p_time<display_R*3)
{display_hourO();}
else if(c_time-p_time>=display_R*3&&c_time-p_time<display_R*4)
{display_minuteT();}
else if(c_time-p_time>=display_R*4&&c_time-p_time<display_R*5)
{display_minuteO();}
else if(c_time-p_time>=display_R*5)
{c_time=millis();
p_time=c_time;
all_off();
}
}
///////////////////////////////////////////////////////////////
void display_hourT()
{ all_off();
digitalWrite(dis1,don);
digitalWrite(dis2,doff);
digitalWrite(dis3,doff);
digitalWrite(dis4,doff);
switch(Hour_T)
{
case 0:
N0();
break;
case 1:
N1();
break;
case 2:
N2();
break;
case 3:
N3();
break;
case 4:
N4();
break;
case 5:
N5();
break;
case 6:
N6();
break;
case 7:
N7();
break;
case 8:
N8();
break;
case 9:
N9();
break;
default:;
}
}
//////////////////////////////////////////////////////////////////
void display_hourO()
{ all_off();
digitalWrite(dis1,doff);
digitalWrite(dis2,don);
digitalWrite(dis3,doff);
digitalWrite(dis4,doff);
switch(Hour_O)
{
case 0:
N0();
break;
case 1:
N1();
break;
case 2:
N2();
break;
case 3:
N3();
break;
case 4:
N4();
break;
case 5:
N5();
break;
case 6:
N6();
break;
case 7:
N7();
break;
case 8:
N8();
break;
case 9:
N9();
break;
default:;
}
}
//////////////////////////////////////////////////////////////////
void display_minuteT()
{ all_off();
digitalWrite(dis1,doff);
digitalWrite(dis2,doff);
digitalWrite(dis3,don);
digitalWrite(dis4,doff);
switch(minute_T)
{
case 0:
N0();
break;
case 1:
N1();
break;
case 2:
N2();
break;
case 3:
N3();
break;
case 4:
N4();
break;
case 5:
N5();
break;
case 6:
N6();
break;
case 7:
N7();
break;
case 8:
N8();
break;
case 9:
N9();
break;
default:;
}
}
//////////////////////////////////////////////////////////////////
void display_minuteO()
{ all_off();
digitalWrite(dis1,doff);
digitalWrite(dis2,doff);
digitalWrite(dis3,doff);
digitalWrite(dis4,don);
switch(minute_O)
{
case 0:
N0();
break;
case 1:
N1();
break;
case 2:
N2();
break;
case 3:
N3();
break;
case 4:
N4();
break;
case 5:
N5();
break;
case 6:
N6();
break;
case 7:
N7();
break;
case 8:
N8();
break;
case 9:
N9();
break;
default:;
}
}
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
void all_off()
{
digitalWrite(a,off);
digitalWrite(b,off);
digitalWrite(c,off);
digitalWrite(d,off);
digitalWrite(e,off);
digitalWrite(f,off);
digitalWrite(g,off);
digitalWrite(dis1,doff);
digitalWrite(dis2,doff);
digitalWrite(dis3,doff);
digitalWrite(dis4,doff);
}
//////////////////////////////////////////////////////////////////
void all_segment_on()
{
digitalWrite(a,on);
digitalWrite(b,on);
digitalWrite(c,on);
digitalWrite(d,on);
digitalWrite(e,on);
digitalWrite(f,on);
digitalWrite(g,on);
}
///////////////////////////////////////////////////
void N0()
{
digitalWrite(a,on);
digitalWrite(b,on);
digitalWrite(c,on);
digitalWrite(d,on);
digitalWrite(e,on);
digitalWrite(f,on);
digitalWrite(g,off);
}
///////////////////////////////////////////////////
void N1()
{
digitalWrite(a,off);
digitalWrite(b,on);
digitalWrite(c,on);
digitalWrite(d,off);
digitalWrite(e,off);
digitalWrite(f,off);
digitalWrite(g,off);
}
///////////////////////////////////////////////////
void N2()
{
digitalWrite(a,on);
digitalWrite(b,on);
digitalWrite(c,off);
digitalWrite(d,on);
digitalWrite(e,on);
digitalWrite(f,off);
digitalWrite(g,on);
}
///////////////////////////////////////////////////
void N3()
{
digitalWrite(a,on);
digitalWrite(b,on);
digitalWrite(c,on);
digitalWrite(d,on);
digitalWrite(e,off);
digitalWrite(f,off);
digitalWrite(g,on);
}
///////////////////////////////////////////////////
void N4()
{
digitalWrite(a,off);
digitalWrite(b,on);
digitalWrite(c,on);
digitalWrite(d,off);
digitalWrite(e,off);
digitalWrite(f,on);
digitalWrite(g,on);
}
///////////////////////////////////////////////////
void N5()
{
digitalWrite(a,on);
digitalWrite(b,off);
digitalWrite(c,on);
digitalWrite(d,on);
digitalWrite(e,off);
digitalWrite(f,on);
digitalWrite(g,on);
}
///////////////////////////////////////////////////
void N6()
{
digitalWrite(a,on);
digitalWrite(b,off);
digitalWrite(c,on);
digitalWrite(d,on);
digitalWrite(e,on);
digitalWrite(f,on);
digitalWrite(g,on);
}
///////////////////////////////////////////////////
void N7()
{
digitalWrite(a,on);
digitalWrite(b,on);
digitalWrite(c,on);
digitalWrite(d,off);
digitalWrite(e,off);
digitalWrite(f,off);
digitalWrite(g,off);
}
///////////////////////////////////////////////////
void N8()
{
digitalWrite(a,on);
digitalWrite(b,on);
digitalWrite(c,on);
digitalWrite(d,on);
digitalWrite(e,on);
digitalWrite(f,on);
digitalWrite(g,on);
}
///////////////////////////////////////////////////
void N9()
{
digitalWrite(a,on);
digitalWrite(b,on);
digitalWrite(c,on);
digitalWrite(d,on);
digitalWrite(e,off);
digitalWrite(f,on);
digitalWrite(g,on);
}
///////////////////// SUBSCRIBE ////////////////////////