#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int buttonPin = 7;
const int ledPin = 9;
const int buzzerPin = 8;
unsigned long startTime = 0;
bool running = false;
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("CRONOMETRU");
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, LOW);
updateLCD(0);
}
void loop() {
if (digitalRead(buttonPin) == HIGH && !running) {
running = true;
startTime = millis();
}
if (running) {
unsigned long currentTime = millis();
unsigned long elapsedTime = (currentTime - startTime) / 1000;
if (elapsedTime <= 60) {
updateLCD(elapsedTime);
controlLED(elapsedTime);
controlBuzzer(elapsedTime);
} else {
running = false;
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, LOW);
}
}
}
void updateLCD(unsigned long seconds) {
int minutes = seconds / 60;
int secs = seconds % 60;
char buffer[6];
sprintf(buffer, "%02d:%02d", minutes, secs);
lcd.setCursor(5, 1);
lcd.print(buffer);
}
void controlLED(unsigned long seconds) {
if (seconds >= 15 && seconds <= 25) {
digitalWrite(ledPin, HIGH);
} else if (seconds >= 26 && seconds <= 40) {
if ((seconds % 2) == 0) {
digitalWrite(ledPin, LOW);
} else {
digitalWrite(ledPin, HIGH);
}
} else if (seconds >= 41) {
digitalWrite(ledPin, LOW);
}
}
void controlBuzzer(unsigned long seconds) {
if (seconds >= 50 && seconds <= 60) {
if ((seconds % 2) == 0) {
digitalWrite(buzzerPin, HIGH);
} else {
digitalWrite(buzzerPin, LOW);
}
} else {
digitalWrite(buzzerPin, LOW);
}
}