#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27,16,2);
int czas = 0;
int clkTime = 0;
int mil = 0;
int sec = 0;
int min = 0;
int light = 0;
int settings = 0;
int rek_mil = 0;
int rek_sec = 0;
int rek_min = 0;
int reset = 1;
int podejscia = 0;
String symbole_1 [18] = {"L ","R ","F ","B ","U ","D ","L' ","R' ","F' ","B' ","U' ","D' ","L2 ","R2 ","F2 ","B2 ","U2 ","D2 "};
void setup() {
// put your setup code here, to run once:
digitalWrite(A1, HIGH);
lcd.begin(16, 2);
lcd.init();
lcd.clear();
pinMode(A3, INPUT_PULLUP);
pinMode(A2, INPUT_PULLUP);
pinMode(A1, OUTPUT);
EEPROM.get(0, light);
EEPROM.get(2, rek_min);
EEPROM.get(4, rek_sec);
EEPROM.get(6, rek_mil);
EEPROM.get(8, reset);
EEPROM.get(10, podejscia);
if(rek_min == -1) {rek_min=0;}
if(rek_sec == -1) {rek_sec=0;}
if(rek_mil == -1) {rek_mil=0;}
if(reset == -1) {reset=0;}
if(podejscia == -1) {podejscia=0;}
if(light == 0) {lcd.noBacklight();}
if(light == 1) {lcd.backlight();}
}
void loop() {
if(clkTime == 1) {
liczenie();
}
if(digitalRead(A3) == HIGH && digitalRead(A2) == HIGH && clkTime == 0 && settings == 0) {
lcd.setCursor(0, 0);
lcd.print("Rekord: ");
lcd.print(rek_min);
lcd.print(":");
lcd.print(rek_sec);
lcd.print(".");
if(rek_mil<10) {
lcd.print("0");
lcd.print(rek_mil);
}
if(rek_mil>=10) {
lcd.print(rek_mil);
}
lcd.setCursor(0, 3);
lcd.print("Rozpocznij");
if(digitalRead(A2) == LOW) {
delay(300);
settings = 1;
lcd.clear();
}
}
if(settings >= 1) {
ustawienia();
}
if(digitalRead(A3) == LOW && clkTime == 0 && settings == 0) {
lcd.clear();
delay(200);
clkTime++;
lcd.setCursor(1, 0);
lcd.print("Mierzenie czasu");
}
if(digitalRead(A2) == LOW && clkTime == 2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KASOWANIE WYNIKU");
delay(300);
digitalWrite(A1, LOW);
}
if(digitalRead(A3) == LOW && clkTime == 2) {
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("ZAPISYWANIE...");
delay(300);
if(rek_min > min) {
EEPROM.put(2, min);
EEPROM.put(4, sec);
EEPROM.put(6, mil);
}
if(rek_min >= min && rek_sec > sec) {
EEPROM.put(2, min);
EEPROM.put(4, sec);
EEPROM.put(6, mil);
}
if(rek_min >= min && rek_sec == sec && rek_mil >= mil) {
EEPROM.put(2, min);
EEPROM.put(4, sec);
EEPROM.put(6, mil);
}
if(reset == 1) {
reset = 0;
EEPROM.put(2, min);
EEPROM.put(4, sec);
EEPROM.put(6, mil);
EEPROM.put(8, reset);
}
podejscia++;
EEPROM.put(10, podejscia);
digitalWrite(A1, LOW);
}
}
void liczenie() {
if(digitalRead(A3) == HIGH && clkTime == 1) {
time();
}
if(digitalRead(A3) == LOW && clkTime == 1) {
clkTime++;
delay(300);
sec = czas/100;
mil = czas-(sec*100);
while(sec>60) {
sec = sec - 60;
min++;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Czas: ");
lcd.print(min);
lcd.print(":");
lcd.print(sec);
lcd.print(".");
if(mil<10) {
lcd.print("0");
lcd.print(mil);
}
if(mil>=10) {
lcd.print(mil);
}
lcd.setCursor(0, 1);
lcd.print("<- Odrzuc");
}
}
void time() {
delay(10);
czas++;
}
void ustawienia() {
lcd.setCursor(4, 0);
lcd.print("Ustawienia");
if(settings == 1) {
lcd.setCursor(0, 1);
lcd.print("Podswietlenie");
lcd.setCursor(15, 1);
lcd.print(light);
if(digitalRead(A3) == LOW && light == 0) {
delay(200);
light = 1;
lcd.backlight();
EEPROM.put(0, light);
}
if(digitalRead(A3) == LOW && light == 1) {
delay(200);
light = 0;
lcd.noBacklight();
EEPROM.put(0, light);
}
}
if(settings == 3) {
lcd.setCursor(0, 1);
lcd.print("Resetowanie TAK");
if(digitalRead(A3) == LOW && digitalRead(A2) == LOW) {
lcd.clear();
lcd.print("RESET");
delay(2000);
EEPROM.put(0, 0);
EEPROM.put(2, 0);
EEPROM.put(4, 0);
EEPROM.put(6, 0);
EEPROM.put(8, 1);
EEPROM.put(10, 0);
digitalWrite(A1, LOW);
}
if(digitalRead(A3) == LOW && digitalRead(A2) == HIGH) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Musisz kliknac");
lcd.setCursor(0, 1);
lcd.print("dwa przyciski");
delay(2000);
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Ustawienia");
}
}
if(settings == 2) {
lcd.setCursor(0, 1);
lcd.print("Podejscia: ");
lcd.print(podejscia);
lcd.print(" ");
}
if(digitalRead(A2) == LOW) {
delay(300);
settings++;
}
if(settings == 4) {
lcd.clear();
settings = 0;
}
}