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


// Пины для сегментов (a, b, c, d, e, f, g) через резисторы 220 Ом
const int segmentPins[] = {12, 11, 10, 9, 8, 7, 6}; 

// Пины для управления 4 разрядами (общий катод)
const int digitPins[] = {A3, A4, A5, A2};           

// Упрощенный массив цифр для стабильной работы симулятора
const int digits[10][7] = {
  {1,1,1,1,1,1,0}, // 0
  {0,1,1,0,0,0,0}, // 1
  {1,1,0,1,1,0,1}, // 2
  {1,1,1,1,0,0,1}, // 3
  {0,1,1,0,0,1,1}, // 4
  {1,0,1,1,0,1,1}, // 5
  {1,0,1,1,1,1,1}, // 6
  {1,1,1,0,0,0,0}, // 7
  {1,1,1,1,1,1,1}, // 8
  {1,1,1,1,0,1,1}  // 9
};

int totalSeconds = 60; // Начальное время таймера (60 секунд / 01:00)
unsigned long lastTick = 0;

void setup() {
  for (int i = 0; i < 7; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
  for (int i = 0; i < 4; i++) {
    pinMode(digitPins[i], OUTPUT);
    digitalWrite(digitPins[i], HIGH);
  }
}

void loop() {
  int minutes = totalSeconds / 60;
  int seconds = totalSeconds % 60;
  int displayValue = minutes * 100 + seconds;

  showNumber(displayValue);

  if (millis() - lastTick >= 1000) {
    lastTick = millis();
    if (totalSeconds > 0) {
      totalSeconds--;
    }
  }
}

void showNumber(int number) {
  int d[4];
  d[0] = number / 1000;         
  d[1] = (number / 100) % 10;   
  d[2] = (number / 10) % 10;    
  d[3] = number % 10;           

  for (int i = 0; i < 4; i++) {
    for (int s = 0; s < 7; s++) {
      digitalWrite(segmentPins[s], LOW);
    }
    
    digitalWrite(digitPins[i], LOW);

    for (int s = 0; s < 7; s++) {
      digitalWrite(segmentPins[s], digits[d[i]][s]);
    }

    delay(3); 

    digitalWrite(digitPins[i], HIGH);
  }
}