#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 10, 5, 4, 3, 2);
const int startButton = 11;
const int stopButton = 12;
unsigned long previousMillis = 0;
unsigned long interval = 10; // Update interval in milliseconds
float time = 0.0;
bool active = false;
unsigned long lastDebounceTimeStart = 0; // Debounce timer for start button
unsigned long lastDebounceTimeStop = 0; // Debounce timer for stop button
unsigned long debounceDelay = 50; // Debounce delay
int lastButtonStateStart = HIGH; // Previous state of the start button
int lastButtonStateStop = HIGH; // Previous state of the stop button
void setup() {
lcd.begin(16, 2);
pinMode(startButton, INPUT_PULLUP);
pinMode(stopButton, INPUT_PULLUP);
lcd.print("Time: 0.00s");
}
void loop() {
int readingStart = digitalRead(startButton);
int readingStop = digitalRead(stopButton);
// Start button debouncing
if (readingStart != lastButtonStateStart) {
lastDebounceTimeStart = millis();
}
if ((millis() - lastDebounceTimeStart) > debounceDelay) {
if (readingStart == LOW && !active) {
time = 0.0; // Reset the timer
active = true;
}
}
lastButtonStateStart = readingStart;
// Stop button debouncing
if (readingStop != lastButtonStateStop) {
lastDebounceTimeStop = millis();
}
if ((millis() - lastDebounceTimeStop) > debounceDelay) {
if (readingStop == LOW && active) {
active = false;
}
}
lastButtonStateStop = readingStop;
// Timer update
if (active) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
time += interval / 1000.0;
lcd.setCursor(0, 0);
lcd.print("Time: ");
lcd.print(time, 2);
lcd.print("s "); // Clear any trailing characters
}
}
}