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