#include <TM1637.h>
const int CLK = 2;
const int DIO = 3;
const int potIn = A7;
int timeSet = 0;
int displayMin = 0;
int displayHour = 0;
bool settingTime = false;
bool readingMode = false;
int timeCount = 0;
long int milsecondCount = 0;
long int t1;
long int t2;
TM1637 tm(CLK, DIO);
void setup() {
tm.init();
tm.set(BRIGHT_DARKEST);
Serial.begin(9600);
}
unsigned int counter = 0;
void timedDelay(int time){
delay(time);
timeCount+=time/60000;
}
void loop() {
t1 = millis();
if(analogRead(A1) > 1000 && analogRead(A2) > 1000){
//Set time count
delay(250);
while(!(analogRead(A1) > 1000 && analogRead(A2) > 1000)){
timeCount = analogRead(potIn)*1.47;
if(timeCount > 1440){
timeCount = 1440;
}
//Convert to time
displayHour = timeCount/60;
displayMin = timeCount%60;
//Display Set Time
tm.display(0, (displayHour / 10) % 10);
tm.display(1, (displayHour / 1) % 10);
tm.display(2, (displayMin / 10) % 10);
tm.display(3, displayMin % 10);
}
delay(250);
}
else if(analogRead(A1) > 1000){
settingTime = !settingTime;
timedDelay(250);
}
else if(analogRead(A2) > 1000){
readingMode = !readingMode;
timedDelay(250);
}
if(settingTime){
digitalWrite(7, HIGH);
timeSet = analogRead(potIn)/4;
timeSet += 300; //Five hours past midnight
//Convert to time
displayHour = timeSet/60;
displayMin = timeSet%60;
//Display Set Time
tm.display(0, (displayHour / 10) % 10);
tm.display(1, (displayHour / 1) % 10);
tm.display(2, (displayMin / 10) % 10);
tm.display(3, displayMin % 10);
}
else{
//Convert to time
displayHour = timeCount/60;
displayMin = timeCount%60;
//Display Set Time
tm.display(0, (displayHour / 10) % 10);
tm.display(1, (displayHour / 1) % 10);
tm.display(2, (displayMin / 10) % 10);
tm.display(3, displayMin % 10);
}
if(readingMode || timeCount == timeSet){
digitalWrite(7, HIGH);
}
else{
digitalWrite(7, LOW);
}
t2 = millis();
if(milsecondCount > 60000){ //Account for runtime speed
timeCount++;
milsecondCount = 0;
}
milsecondCount += t2-t1;
}