#include <SimpleTimer.h>
SimpleTimer ledTimer;
int latchPin = 11;
int clockPin = 12;
int dataPin = 5;
int digit = 0; // Which digit is active
long number = 42; // The shown number
int numbers[2]; // The shown number split into digits, produced by the Split() function
int cathodePins[] = {3, 4}; // Which pins correspond to the activation pins on the 7 seg display
byte table[10] {B11111100, B01100000, B11011010, B11110010, B01100110, B10110110, B10111110, B11100000, B11111110, B11110110};
void setup() {
Serial.begin(115200);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
// Set pin for reset button
pinMode(2, INPUT);
// Set activation pins for 7 seg display
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
ScreenOff();
ledTimer.setInterval(500);
}
void loop() {
// TODO: Make sure that if this stack overflows, it does not cause an issue
static unsigned long timer = millis();
if(digitalRead(2) == HIGH)
Reset();
number = (int)timer/1000;
Split(number);
Display();
}
void Reset()
{
}
void Split(long num) {
int singleDigits = num % 10;
int doubleDigits = (num - singleDigits) / 10;
numbers[0] = doubleDigits;
numbers[1] = singleDigits;
}
void Display()
{
if (ledTimer.isReady())
{
ScreenOff();
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, table[numbers[digit]]);
digitalWrite(cathodePins[digit], LOW);
digitalWrite(latchPin, HIGH);
digit ++;
if (digit == 2)
{
digit = 0;
}
ledTimer.reset();
}
}
void ScreenOff(){
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}