/* Example test program to display Digital clock for 4-digit, 7-segment display. This example code is in the public domain. Author: Marsianin245 */ int A = 9; int F = 8; int B = 7; int E = 6; int D = 5; int C = 4; int G = 3; int digit1= 2; int digit2= 10; int digit3= 11; int digit4= 12; int button1 = A5; int state = 0; int digit = 1; int number[4]={0,0,0,0}; // variables used to hold beginning and end time of interval im millis unsigned long mills1,mills2; // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(A, OUTPUT); pinMode(F, OUTPUT); pinMode(B, OUTPUT); pinMode(E, OUTPUT); pinMode(D, OUTPUT); pinMode(C, OUTPUT); pinMode(G, OUTPUT); pinMode(digit1, OUTPUT); pinMode(digit2, OUTPUT); pinMode(digit3, OUTPUT); pinMode(digit4, OUTPUT); pinMode(button1,INPUT_PULLUP); digitalWrite(A, LOW); digitalWrite(F, LOW); digitalWrite(B, LOW); digitalWrite(E, LOW); digitalWrite(D, LOW); digitalWrite(C, LOW); digitalWrite(G, LOW); digitalWrite(digit1, HIGH); digitalWrite(digit2, HIGH); digitalWrite(digit3, HIGH); digitalWrite(digit4, HIGH); // setup start of time interval in millis mills1= millis(); } void clear_all(){ digitalWrite(A, LOW); digitalWrite(F, LOW); digitalWrite(B, LOW); digitalWrite(E, LOW); digitalWrite(D, LOW); digitalWrite(C, LOW); digitalWrite(G, LOW); } void select_digit(int n){ digitalWrite(digit1, HIGH); digitalWrite(digit2, HIGH); digitalWrite(digit3, HIGH); digitalWrite(digit4, HIGH); switch(n){ case 1: digitalWrite(digit1, LOW); break; case 2: digitalWrite(digit2, LOW); break; case 3: digitalWrite(digit3, LOW); break; case 4: digitalWrite(digit4, LOW); break; } } void test_segments(){ switch(state){ case 1: digitalWrite(A, HIGH); break; case 2: digitalWrite(B, HIGH); break; case 3: digitalWrite(C, HIGH); break; case 4: digitalWrite(D, HIGH); break; case 5: digitalWrite(E, HIGH); break; case 6: digitalWrite(F, HIGH); break; case 7: digitalWrite(G, HIGH); break; case 8: clear_all(); state =0; break; } state+=1; delay(1000); } int table_digits[10][7]={ {1,1,1,1,1,1,0}, // 0 {0,1,1,0,0,0,0}, // 1 {1,1,0,1,1,0,1}, // 2 {1,1,1,1,0,0,1}, // 3 {0,1,1,0,0,1,1}, // 4 {1,0,1,1,0,1,1}, // 5 {1,0,1,1,1,1,1}, // 6 {1,1,1,0,0,0,0}, // 7 {1,1,1,1,1,1,1}, // 8 {1,1,1,1,0,1,1}, // 9 }; void dislay_digit(int n){ clear_all(); if(table_digits[n][0]) digitalWrite(A, HIGH); if(table_digits[n][1]) digitalWrite(B, HIGH); if(table_digits[n][2]) digitalWrite(C, HIGH); if(table_digits[n][3]) digitalWrite(D, HIGH); if(table_digits[n][4]) digitalWrite(E, HIGH); if(table_digits[n][5]) digitalWrite(F, HIGH); if(table_digits[n][6]) digitalWrite(G, HIGH); } void display_number(int *number){ select_digit(digit); dislay_digit(number[digit-1]); digit+=1; if(digit>4) { digit =1;} } /*******************************************************/ void increment_digits(){ number[0]+=1; if(number[0]>9){ number[1]+=1; number[0]=0; } if(number[1]>5){ number[2]+=1; number[1]=0; } if(number[2]>9){ number[3]+=1; number[2]=0; } if(number[3]>=2 && number[2]>3){ // over 24 o'clock reset to 0 number[2]=0; number[3]=0; } } unsigned long mill=0; long interval=60000L; int pressed=0; int count_pressed=0; // the loop function runs over and over again forever void loop() { pressed = !digitalRead(button1); if(pressed == 1){ // fast forward // when button pressed if(count_pressed > 400){ interval = 30; } else{ interval = 600; } count_pressed +=1; } else { interval = 60000L; count_pressed = 0; } display_number(number); delay(6); // compute time interval // since last increment mills2= millis(); mill = (mills2 - mills1); if(mill>interval){ increment_digits(); mills1 = mills2; } }