Загрузка данных


#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);
}