#include <TM1637Display.h>
#include <Servo.h>
#define CLK_PIN 2
#define DIO_PIN 3
#define START_PIN 4
#define STOP_PIN 5
#define RESET_PIN 6
#define LED_PIN 7
#define SERVO_PIN 8
unsigned long start_time;
unsigned long elapsed_time;
bool is_running = false;
TM1637Display display(CLK_PIN, DIO_PIN);
Servo servo;
void setup() {
display.setBrightness(7);
display.showNumberDecEx(0, (1 << 2) | (1 << 3));
pinMode(START_PIN, INPUT_PULLUP);
pinMode(STOP_PIN, INPUT_PULLUP);
pinMode(RESET_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
servo.attach(SERVO_PIN);
}
void loop() {
if (digitalRead(START_PIN) == LOW && !is_running) {
start_time = millis() - elapsed_time;
is_running = true;
display.clear();
digitalWrite(LED_PIN, HIGH);
servo.write(90);
} else if (digitalRead(STOP_PIN) == LOW && is_running) {
elapsed_time = millis() - start_time;
is_running = false;
unsigned int seconds = elapsed_time / 1000;
unsigned int milliseconds = elapsed_time % 1000;
display.showNumberDecEx((seconds * 100) + (milliseconds / 10), (1 << 2) | (1 << 3));
digitalWrite(LED_PIN, LOW);
servo.write(0);
} else if (digitalRead(RESET_PIN) == LOW) {
elapsed_time = 0;
is_running = false;
display.showNumberDecEx(0, (1 << 2) | (1 << 3));
digitalWrite(LED_PIN, LOW);
servo.write(0);
}
if (is_running) {
elapsed_time = millis() - start_time;
unsigned int seconds = elapsed_time / 1000;
unsigned int milliseconds = elapsed_time % 1000;
display.showNumberDecEx((seconds * 100) + (milliseconds / 10), (1 << 2) | (1 << 3));
}
delay(10);
}