#define dig1 2
#define dig2 3
#define dig3 4
#define dig4 5
#define a 6
#define b 7
#define c 8
#define d 9
#define e 10
#define f 11
#define g 12
#define cnl 13
#define p1 A0
#define p2 A1
int segPins[7] = {a,b,c,d,e,f,g};
int mint = 59;
int hr = 11;
int cnt = 0;
int cp1 = 0;
int lastBp1 = HIGH;
int lastBp2 = HIGH;
int cnthr = 0;
byte digits[10][7] = {
{0,0,0,0,0,0,1},
{1,0,0,1,1,1,1},
{0,0,1,0,0,1,0},
{0,0,0,0,1,1,0},
{1,0,0,1,1,0,0},
{0,1,0,0,1,0,0},
{0,1,0,0,0,0,0},
{0,0,0,1,1,1,1},
{0,0,0,0,0,0,0},
{0,0,0,0,1,0,0}
};
void allDigitsOff() {
digitalWrite(dig1, LOW);
digitalWrite(dig2, LOW);
digitalWrite(dig3, LOW);
digitalWrite(dig4, LOW);
}
void showDigit(int n) {
for (int i=0; i<7; i++) {
digitalWrite(segPins[i], digits[n][i] ? HIGH : LOW);
}
}
void selectDigit(int digit) {
allDigitsOff();
switch(digit) {
case 1: digitalWrite(dig1, HIGH); break;
case 2: digitalWrite(dig2, HIGH); break;
case 3: digitalWrite(dig3, HIGH); break;
case 4: digitalWrite(dig4, HIGH); break;
}
}
void setup() {
pinMode(dig1, OUTPUT);
pinMode(dig2, OUTPUT);
pinMode(dig3, OUTPUT);
pinMode(dig4, OUTPUT);
pinMode(cnl, OUTPUT);
pinMode(p1, INPUT);
pinMode(p2, INPUT);
for (int i=0; i<7; i++) pinMode(segPins[i], OUTPUT);
}
void loop() {
int r = mint / 10;
int s = mint % 10;
int p = hr / 10;
int q = hr % 10;
int bp1 = digitalRead(p1);
int bp2 = digitalRead(p2);
if (lastBp1 == HIGH && bp1 == LOW) {
cp1++;
if (cp1 > 2) cp1 = 1;
}
if (lastBp2 == HIGH && bp2 == LOW) {
if (cp1 == 1) {
mint++;
} else if (cp1 == 2) {
cnthr++;
}
}
lastBp1 = bp1;
lastBp2 = bp2;
showDigit(p); selectDigit(1); delay(5);allDigitsOff();
showDigit(q); selectDigit(2); delay(5);allDigitsOff();
showDigit(r); selectDigit(3); delay(5);allDigitsOff();
showDigit(s); selectDigit(4); delay(5);allDigitsOff();
cnt++;
if (cnt % 50 == 0){
digitalWrite(cnl, LOW );
delay(100);
//allDigitsOff();
}
else { digitalWrite(cnl, HIGH );}
if (cnt >= 3000) {
mint++;
cnt = 0;
}
if (mint >= 60) {
hr++;
cnthr++;
mint = 0;
}
//if (cnthr > 24) cnthr = 1;
if (cnthr == 24) {cnthr = 0;}
if (cnthr <= 12) {hr = cnthr;}
if (cnthr > 12 && cnthr != 24) { hr = cnthr - 12;}
}