// Пины для сегментов (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);
}
}