const int segPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
const int digitPins[] = {5, 4, 3, 2};
const byte charMasks[] = {
0b11111100, // 0
0b01100000, // 1
0b11011010, // 2
0b11110010, // 3
0b01100110, // 4
0b10110110, // 5
0b10111110, // 6
0b11100000, // 7
0b11111110, // 8
0b11110110 // 9
};
void setup() {
for (int i = 0; i < 8; i++) pinMode(segPins[i], OUTPUT);
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
digitalWrite(digitPins[i], HIGH);
}
}
void loop() {
// Секундомер запускается сам сразу после включения
unsigned long currentMillis = millis();
int totalSec = currentMillis / 1000;
int m = (totalSec / 60) % 100;
int s = totalSec % 60;
int digits[4] = { m / 10, m % 10, s / 10, s % 10 };
// Динамическая индикация
for (int d = 0; d < 4; d++) {
digitalWrite(digitPins[d], HIGH); // Выключаем разряд
byte mask = charMasks[digits[d] % 10];
for (int sIdx = 0; sIdx < 8; sIdx++) {
digitalWrite(segPins[sIdx], bitRead(mask, 7 - sIdx));
}
digitalWrite(digitPins[d], LOW); // Включаем разряд
delay(3);
}
}