#include <TM1637.h>
#define inDelkaOsvit A0 //delka osvitu
#define inTlacReset A2 //A2 tlacitko
#define inTlacStart A1 //A1 tlacitko
#define modraLED 2 //D2 LED dioda
#define cervenaLED 4 //D4 LED dioda
//#define blikaLED 6 //D6 LED dioda
TM1637 TM1; // Each display needs its own object
#define SECS_PER_MIN (60UL)
#define numberOfSeconds(_time_) (_time_ % SECS_PER_MIN)
#define numberOfMinutes(_time_) ((_time_ / SECS_PER_MIN) % SECS_PER_MIN)
//secondsOsvit %= 60; // celociselny zbytek po deleni (72%60 = 12)
int delkaOsvitVal = 0;
int delkaOsvitMin = 0;
boolean tlacStart = false;
boolean tlacReset = false;
//boolean ledBlikat = false;
boolean zobrazNula = false;
bool colon = true; // for a toggling of the colon in the middle.
unsigned long delkaOsvitMillis;
unsigned long startMillis;
unsigned long currentMillis;
unsigned long currentRozdilMillis;
long delkaIntervalMls;
void setup() {
Serial.begin(9600);
pinMode(modraLED, OUTPUT);
pinMode(cervenaLED, OUTPUT);
//pinMode(blikaLED, OUTPUT);
pinMode(inTlacStart,INPUT);
pinMode(inTlacReset,INPUT);
digitalWrite(modraLED, LOW);
//digitalWrite(blikaLED, LOW);
// initialize the LCD
TM1.begin(6, 8, 4); // clockpin, datapin, #digits
TM1.displayClear();
TM1.setBrightness(7); // full brightness, default is 3
zobrazHodnoty(0,0);
delay(2000);
digitalWrite(cervenaLED, HIGH);
delkaOsvitVal = analogRead(inDelkaOsvit);
//delkaOsvitMillis = map(delkaOsvitVal, 0, 1023, 360000, 1200000);
}
void loop() {
//Serial.print(delkaOsvitVal);
//Serial.print(" Delka min: ");
//Serial.println(delkaOsvitMillis);
// zmacknuto tlacitko Start
if (digitalRead(inTlacStart) == 1 && tlacStart == false) {
tlacStart = true;
tlacReset = false;
//ledBlikat = false;
digitalWrite(cervenaLED, LOW);
digitalWrite(modraLED, HIGH);
//digitalWrite(blikaLED, LOW);
startMillis = millis();
}
// zmacknuto tlacitko Reset
if (digitalRead(inTlacReset) == 1 && tlacReset == false) {
tlacReset = true;
tlacStart = false;
//ledBlikat = false;
zobrazNula = false;
digitalWrite(cervenaLED, HIGH);
digitalWrite(modraLED, LOW);
//digitalWrite(blikaLED, LOW);
}
//if (ledBlikat) {
// digitalWrite(blikaLED, (millis() / 1000) % 2);
//}
if (tlacStart) {
currentMillis = millis();
currentRozdilMillis = (currentMillis - startMillis);
if (currentRozdilMillis >= delkaOsvitMillis) {
tlacStart = false;
digitalWrite(cervenaLED, HIGH);
digitalWrite(modraLED, LOW);
//digitalWrite(blikaLED, HIGH);
//ledBlikat = true;
zobrazNula = true;
zobrazHodnoty(delkaOsvitMillis/1000,0);
}
zobrazHodnoty(delkaOsvitMillis/1000,(delkaOsvitMillis-currentRozdilMillis)/1000);
} else {
delkaOsvitVal = analogRead(inDelkaOsvit);
delkaOsvitMillis = map(delkaOsvitVal, 0, 1023, 360000, 1200000);
if (zobrazNula) {
zobrazHodnoty(delkaOsvitMillis/1000,0);
} else {
zobrazHodnoty(delkaOsvitMillis/1000,delkaOsvitMillis/1000);
}
}
}
String getTimeStr(int seconds, int minutes) {
String minut;
String sec;
if(minutes < 10) {
minut = String("0") + String(minutes);
} else {
minut = String(minutes);
}
if(seconds < 10) {
sec = String("0") + String(seconds);
} else {
sec = String(seconds);
}
return String(minut) + String(":") + sec;
}
void zobrazHodnoty(long nastaveno, long odpocet) {
//delay(500);
int minutesN = numberOfMinutes(nastaveno);
int secondsN = numberOfSeconds(nastaveno);
String casNastaven = getTimeStr(secondsN,minutesN);
int minutesO = numberOfMinutes(odpocet);
int secondsO = numberOfSeconds(odpocet);
String casOdpocet = getTimeStr(secondsO,minutesO);
TM1.displayTime(minutesO,secondsO, colon); // display the numbers
/*
lcd.setCursor(0, 0);
lcd.print("NAST. CAS:");
lcd.setCursor(11, 0);
lcd.print(" ");
lcd.setCursor(11, 0);
lcd.print(casNastaven);
lcd.setCursor(0, 1);
lcd.print("SKUT. CAS:");
lcd.setCursor(11, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print(casOdpocet);
*/
}