#include <MsTimer2.h>
#include <FreqCounter.h>
const int latchPin = 8;
const int clockPin = 3;
const int dataPin = 9;
byte dec[] = {
0b11000000,0b11111001,
0b10100100,0b10110000,
0b10011001,0b10010010,
0b10000011,0b11111000,
0b10000000,0b10011000,}
;
unsigned long long k, s, m, h;
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
Serial.begin(9600); // connect to the serial port
MsTimer2::set(10*10, countup);
MsTimer2::start();
}
void countup()
{
interrupts();
k++;
}
void loop()
{
static char c[128];
static char *p = c;
unsigned int ls,lm;
if (Serial.available() > 0) {
*p = Serial.read();
Serial.write(*p);
switch(*p)
{
case '.':
*p = '\0';
p = c;
Serial.write("set ") ;
Serial.write(c) ;
k+=200;
return;
break;
case '\n':
*p = '\0';
p = c;
Serial.write("set ") ;
Serial.write(c) ;
if(sscanf(c, "%d:%d", &h, &m) == 2)
{
k=h*60*60*10+m*60*10;
}
return;
break;
default:
*p++;
}
}
s = k /10;
m = s / 60;
h = m / 60;
s =s % 60;
m =m % 60;
digitalWrite(latchPin, LOW);
if(h<100) shiftOut(dataPin, clockPin, MSBFIRST, dec[(analogRead(0)/1)%10]);
if(h<1000) shiftOut(dataPin, clockPin, MSBFIRST, dec[(k/1)%10]);
shiftOut(dataPin, clockPin, MSBFIRST, dec[s%10] & 0b01111111);
shiftOut(dataPin, clockPin, MSBFIRST, dec[(s/10)%10]);
shiftOut(dataPin, clockPin, MSBFIRST, dec[m%10] & 0b01111111);
shiftOut(dataPin, clockPin, MSBFIRST, dec[(m/10)%10]);
shiftOut(dataPin, clockPin, MSBFIRST, dec[(h/1)%10] & 0b01111111);
shiftOut(dataPin, clockPin, MSBFIRST, dec[(h/10)%10]);
if(h>=100) shiftOut(dataPin, clockPin, MSBFIRST, dec[(h/100)%10]);
if(h>=1000) shiftOut(dataPin, clockPin, MSBFIRST, dec[(h/1000)%10]);
digitalWrite(latchPin, HIGH);
delay(50);
}