#include <SevSeg.h>
#include <Wire.h>
//Pin definitions
const int digitPins[] = {2, 3, 4, 5};
const int segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
const byte digitPatterns[] = {
B00111111, // 0
B00000110, // 1
B01011011, // 2
B01001111, // 3
B01100110, // 4
B01101101, // 5
B01111101, // 6
B00000111, // 7
B01111111, // 8
B01101111// 9
};
int secondsCount = 0; //seconds count
int minutes = 50;
int hours = 12;
unsigned long timer = 0;
void setup () {
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
digitalWrite(digitPins[i], HIGH); //turn off all digits intially
}
// set the segment pins as outputs
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
Serial.begin(9600);
}
void loop() {
if (secondsCount < 60) {
if(millis() - timer > 10000) {
timer = timer + 1000;
secondsCount++;
Serial.println(secondsCount);
}
}
if (secondsCount == 60){
secondsCount = 0;
minutes = minutes + 1;
}
if (minutes == 60 ) {
minutes = 0;
hours = hours + 1;
}
if (hours == 24) {
secondsCount = 0;
minutes = 0;
hours = 0;
}
//read current time
//display hours and minutes
displayNumber(hours / 10, 0); //display tens digit of hours
delay(5);
displayNumber(hours % 10, 1); //display ones digit of hours
delay(5);
displayNumber(minutes / 10, 2); //display tens digit of minutes
delay(5);
displayNumber(minutes % 10, 3); //display ones digit of minutes
delay(5);
}
void displayNumber(int number, int digit) {
//activate the appropriate digit
digitalWrite(digitPins[digit], LOW);
//display the correspinding digit pattern
for (int i = 0; i < 8; i++) {
digitalWrite(segmentPins[i], bitRead(digitPatterns[number], i));
}
if (digit == 1) {
digitalWrite(segmentPins[7], HIGH);
}
delay(5);
for (int i = 0; i < 8; i++) {
digitalWrite(segmentPins[i], LOW);
}
digitalWrite(digitPins[digit], HIGH);
}