#include <LiquidCrystal_I2C.h>
#define buttonPin 2
#define ledPin 3
#define buzzerPin 4
LiquidCrystal_I2C lcd(0x27, 16, 2);
unsigned long lightUpLed;
unsigned long pressedAtTime;
bool stav;
#define debounceDelay 50
bool buttonState;
bool lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
lcd.init();
lcd.backlight();
zobraz("Cakaj na led");
lightUpLed = random(5000,7000);
digitalWrite(ledPin, LOW);
}
void loop() {
if(lightUpLed == millis()){
digitalWrite(ledPin, HIGH);
stav=true;
}
if(stav){
bool reading = digitalRead(buttonPin);
if(reading){
stav=false;
pressedAtTime = millis();
tone(buzzerPin,262,200);
}
if(pressedAtTime > lightUpLed && !stav){
zobraz(pressedAtTime - lightUpLed);
}
}
if(millis() - pressedAtTime > 1000){
bool reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
zobraz("Cakaj na led");
lightUpLed = random(5000,7000) + millis();
digitalWrite(ledPin, LOW);
}
}
}
lastButtonState = reading;
}
}
void zobraz(String text){
lcd.clear();
lcd.setCursor(0,0);
lcd.print(text);
}
void zobraz(unsigned long number){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Tvoj reakcny cas");
lcd.setCursor(0,1);
lcd.print(String(number)+" ms");
}