#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // پینهای متصل به نمایشگر
int startButtonPin = 6; // پین متصل به دکمه شروع
int stopButtonPin = 7; // پین متصل به دکمه توقف
int recordButtonPin = 8; // پین متصل به دکمه ثبت رکورد
int resetButtonPin = 9; // پین متصل به دکمه ریست
int startButtonState = 0;
int stopButtonState = 0;
int recordButtonState = 0;
int resetButtonState = 0;
bool running = false;
unsigned long startTime = 0;
unsigned long elapsedTime = 0;
unsigned long record = 0;
bool recordSaved = false;
bool showRecord = false;
void setup() {
lcd.begin(16, 2);
pinMode(startButtonPin, INPUT);
pinMode(stopButtonPin, INPUT);
pinMode(recordButtonPin, INPUT);
pinMode(resetButtonPin, INPUT);
}
void loop() {
startButtonState = digitalRead(startButtonPin);
stopButtonState = digitalRead(stopButtonPin);
recordButtonState = digitalRead(recordButtonPin);
resetButtonState = digitalRead(resetButtonPin);
if (resetButtonState == HIGH) {
running = false;
elapsedTime = 0;
startTime = 0;
showRecord = false;
delay(200); // جلوگیری از چندین بار ریست با یک فشار دکمه
}
if (startButtonState == HIGH && !running) {
running = true;
startTime = millis();
elapsedTime = 0;
showRecord = false;
}
if (stopButtonState == HIGH && running) {
running = false;
elapsedTime = millis() - startTime;
}
if (recordButtonState == HIGH && !running && !recordSaved) {
record = elapsedTime;
recordSaved = true;
showRecord = true;
delay(200); // جلوگیری از چندین بار ثبت رکورد با یک فشار دکمه
}
if (running) {
elapsedTime = millis() - startTime;
displayTime(elapsedTime);
} else if (showRecord) {
displayRecord(record);
} else {
displayTime(elapsedTime);
}
}
void displayTime(unsigned long time) {
int minutes = time / 60000;
int seconds = (time % 60000) / 1000;
int milliseconds = (time % 1000) / 10;
lcd.setCursor(0, 0);
lcd.print("Time: ");
lcd.print(minutes);
lcd.print(":");
if (seconds < 10) {
lcd.print("0");
}
lcd.print(seconds);
lcd.print(".");
if (milliseconds < 10) {
lcd.print("0");
}
lcd.print(milliseconds);
}
void displayRecord(unsigned long time) {
int minutes = time / 60000;
int seconds = (time % 60000) / 1000;
int milliseconds = (time % 1000) / 10;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Record:");
lcd.setCursor(0, 1);
lcd.print(minutes);
lcd.print(":");
if (seconds < 10) {
lcd.print("0");
}
lcd.print(seconds);
lcd.print(".");
if (milliseconds < 10) {
lcd.print("0");
}
lcd.print(milliseconds);
}