const int segA = 7;
const int segB = 9;
const int segC = 5;
const int segD = 3;
const int segE = 2;
const int segF = 8;
const int segG = 6;
const int segPoint = 4;
const int digitMin = 10;
const int digitDecMin = 11;
const int digitHour = 12;
const int digitDecHour = 13;
const byte 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 hours = 0;
int minutes = 0;
int seconds = 0;
int currentDigit = 0;
void setup() {
// Настройка пинов как выходов
digitalWrite(segA, OUTPUT);
digitalWrite(segB, OUTPUT);
digitalWrite(segC, OUTPUT);
digitalWrite(segD, OUTPUT);
digitalWrite(segE, OUTPUT);
digitalWrite(segF, OUTPUT);
digitalWrite(segG, OUTPUT);
digitalWrite(segPoint, OUTPUT);
digitalWrite(digitMin, OUTPUT);
digitalWrite(digitDecMin, OUTPUT);
digitalWrite(digitHour, OUTPUT);
digitalWrite(digitDecHour, OUTPUT);
updateDisplay(); // Изначально отображаем "00:00"
}
void displayDigit(int digit, int pin) {
digitalWrite(pin, HIGH);
digitalWrite(segA, digits[digit][0]);
digitalWrite(segB, digits[digit][1]);
digitalWrite(segC, digits[digit][2]);
digitalWrite(segD, digits[digit][3]);
digitalWrite(segE, digits[digit][4]);
digitalWrite(segF, digits[digit][5]);
digitalWrite(segG, digits[digit][6]);
digitalWrite(pin, LOW);
}
void updateDisplay() {
// Отключаем все цифры
digitalWrite(digitDecHour, HIGH);
digitalWrite(digitHour, HIGH);
digitalWrite(digitDecMin, HIGH);
digitalWrite(digitMin, HIGH);
// Отключаем все точки перед обновлением
digitalWrite(segPoint, LOW);
// Отображаем каждую цифру по очереди
switch (currentDigit) {
case 0:
displayDigit(hours / 10, digitDecHour);
break;
case 1:
if (seconds % 2 == 0) {
digitalWrite(segPoint, HIGH);
}
displayDigit(hours % 10, digitHour);
break;
case 2:
displayDigit(minutes / 10, digitDecMin);
digitalWrite(segPoint, LOW);
break;
case 3:
displayDigit(minutes % 10, digitMin);
break;
}
// Циклический переход к следующей цифре
currentDigit = (currentDigit + 1) % 4;
}
void loop() {
static unsigned long lastUpdateTime = 0;
// Обновляем каждую секунду
if (millis() - lastUpdateTime >= 1000) {
lastUpdateTime = millis();
seconds++;
if (seconds >= 60) {
seconds = 0;
minutes++;
if (minutes >= 60) {
minutes = 0;
hours++;
if (hours >= 24) {
hours = 0;
}
}
}
}
static unsigned long lastDisplayUpdate = 0;
if (millis() - lastDisplayUpdate >= 10) {
lastDisplayUpdate = millis();
updateDisplay();
}
}