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


int D1 = 9;
int D2 = 10;
int D3 = 11;
int D4 = 12;
int delay_ = 25;
int count = 0;        // Секунды (0-60)
int delaySum = 0;
bool stopped = false; // Флаг остановки

byte numbers[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
};

void selectDisplay(int D)
{
  if (D == D1) {
    digitalWrite(D1, LOW);
    digitalWrite(D2, HIGH);
    digitalWrite(D3, HIGH);
    digitalWrite(D4, HIGH);
  } else if (D == D2) {
    digitalWrite(D1, HIGH);
    digitalWrite(D2, LOW);
    digitalWrite(D3, HIGH);
    digitalWrite(D4, HIGH);
  } else if (D == D3) {
    digitalWrite(D1, HIGH);
    digitalWrite(D2, HIGH);
    digitalWrite(D3, LOW);
    digitalWrite(D4, HIGH);
  } else if (D == D4) {
    digitalWrite(D1, HIGH);
    digitalWrite(D2, HIGH);
    digitalWrite(D3, HIGH);
    digitalWrite(D4, LOW);
  }
}

void writeNumber(int num)
{
  for (int j = 0; j < 7; j++) {
    digitalWrite(j + 2, numbers[num][j]);
  }
}

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(D1, OUTPUT);
  pinMode(D2, OUTPUT);
  pinMode(D3, OUTPUT);
  pinMode(D4, OUTPUT);
}

void loop() {
  // Динамическая индикация всех 4 разрядов
  selectDisplay(D4);
  writeNumber(count % 10);
  delay(delay_);
  
  selectDisplay(D3);
  writeNumber((count % 100) / 10);
  delay(delay_);
  
  selectDisplay(D2);
  writeNumber((count % 1000) / 100);
  delay(delay_);
  
  selectDisplay(D1);
  writeNumber(count / 1000);
  delay(delay_);
  
  // Счёт времени (только если не остановлен)
  if (!stopped) {
    delaySum = delaySum + (delay_ * 4);
    if (delaySum >= 1000) {
      count++;
      delaySum = 0;
      
      // Остановка на 60 секундах
      if (count >= 60) {
        count = 60;
        stopped = true;
      }
    }
  }
}