I am trying to build the code for a clock that counts up and shows MM:SS on 4 7-segment displays. So far, I can display any number (0-9) by using the shiftOut() function. However, I cant think of a way to implement the counting up feature. I have tried a few examples found online but none have worked very well for me.
The circuit can be found on Tinkercad here: Tinkercad | From mind to design in minutes
code:
#define clockPin 10 // clock on pin 10
#define latchPin 9 // latch on pin 9
#define data1 8 // display 00:0x
#define data2 7 // display 00:x0
#define data3 6 // display 0x:00
#define data4 5 // display x0:00
void disp(int pin, int n);
void setup(){
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(data1, OUTPUT);
pinMode(data2, OUTPUT);
pinMode(data3, OUTPUT);
pinMode(data4, OUTPUT);
for(int i=data4; i<=data1; i++){ // Turn off displays
digitalWrite(i, HIGH);
}
}
void loop() {
int n = millis() / 1000;
int seconds = n % 60 ;
int minutes = n / 60 ;
int hours = minutes / 24;
minutes = minutes % 60;
hours = hours % 24;
}
void disp(int pin, int n){
switch (n){
case 0:
digitalWrite(latchPin, LOW);
shiftOut(pin, clockPin, LSBFIRST, 0x3);
digitalWrite(latchPin, HIGH);
break;
case 1:
digitalWrite(latchPin, LOW);
shiftOut(pin, clockPin, LSBFIRST, 0x9F);
digitalWrite(latchPin, HIGH);
break;
case 2:
digitalWrite(latchPin, LOW);
shiftOut(pin, clockPin, LSBFIRST, 0x25);
digitalWrite(latchPin, HIGH);
break;
case 3:
digitalWrite(latchPin, LOW);
shiftOut(pin, clockPin, LSBFIRST, 0xD);
digitalWrite(latchPin, HIGH);
break;
case 4:
digitalWrite(latchPin, LOW);
shiftOut(pin, clockPin, LSBFIRST, 0x99);
digitalWrite(latchPin, HIGH);
break;
case 5:
digitalWrite(latchPin, LOW);
shiftOut(pin, clockPin, LSBFIRST, 0x49);
digitalWrite(latchPin, HIGH);
break;
case 6:
digitalWrite(latchPin, LOW);
shiftOut(pin, clockPin, LSBFIRST, 0x41);
digitalWrite(latchPin, HIGH);
break;
case 7:
digitalWrite(latchPin, LOW);
shiftOut(pin, clockPin, LSBFIRST, 0x1F);
digitalWrite(latchPin, HIGH);
break;
case 8:
digitalWrite(latchPin, LOW);
shiftOut(pin, clockPin, LSBFIRST, 0x1);
digitalWrite(latchPin, HIGH);
break;
case 9:
digitalWrite(latchPin, LOW);
shiftOut(pin, clockPin, LSBFIRST, 0x19);
digitalWrite(latchPin, HIGH);
break;
default:
break;
}
}