#include <QuadDisplay.h>
#define DISPLAY_PIN 9
#define BUTTON_PIN 2
#define LED_PIN 13 // Пин для светодиода
// Состояния таймера
bool lastButton = HIGH;
bool timerRunning = false; // true=работает, false=остановлен
unsigned long startTime = 0;
unsigned long elapsedSeconds = 0; // Хранит последнее значение времени
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW); // Начинаем с выключенным светодиодом
Serial.begin(9600);
// Инициализация дисплея
displayClear(DISPLAY_PIN);
delay(100);
displayInt(DISPLAY_PIN, 0);
Serial.println("=== ТАЙМЕР (MM:SS) ===");
Serial.println("Нажмите кнопку - СТАРТ c 0");
Serial.println("Нажмите еще раз - СТОП (время замирает)");
Serial.println("Нажмите снова - СТАРТ c 0");
Serial.println("=====================");
}
void loop() {
bool currentButton = digitalRead(BUTTON_PIN);
// Обработка нажатия кнопки (по фронту: было HIGH, стало LOW)
if (lastButton == HIGH && currentButton == LOW) {
delay(50); // Антидребезг
if (!timerRunning) {
// СТАРТ таймера с 0
startTime = millis();
elapsedSeconds = 0;
timerRunning = true;
digitalWrite(LED_PIN, HIGH); // Включаем светодиод
Serial.println(">>> СТАРТ с 0 <<<");
updateDisplay(0);
}
else {
// СТОП таймера (сохраняем текущее время на дисплее)
elapsedSeconds = (millis() - startTime) / 1000;
timerRunning = false;
digitalWrite(LED_PIN, LOW); // Выключаем светодиод
Serial.print(">>> СТОП <<< Время: ");
printTime(elapsedSeconds);
updateDisplay(elapsedSeconds); // Показываем остановленное время
}
}
lastButton = currentButton;
// Обновление дисплея во время работы таймера
if (timerRunning) {
unsigned long currentSeconds = (millis() - startTime) / 1000;
updateDisplay(currentSeconds);
delay(50); // Небольшая задержка для стабильности
}
}
// Функция обновления дисплея
void updateDisplay(unsigned long seconds) {
int minutes = seconds / 60;
int secs = seconds % 60;
int displayValue = minutes * 100 + secs;
// Вывод на Quad Display (формат MMSS)
displayInt(DISPLAY_PIN, displayValue);
}
// Функция вывода времени в Serial Monitor
void printTime(unsigned long seconds) {
int minutes = seconds / 60;
int secs = seconds % 60;
Serial.print(minutes);
Serial.print(":");
if (secs < 10) Serial.print("0");
Serial.println(secs);
}