// Полный код без библиотеки SevSeg — работает в Tinkercad
byte segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // A, B, C, D, E, F, G, DP
byte digitPins[] = {10, 11, 12, 13}; // Разряды 1-4
const int buttonPin = A0;
bool isDisplayOn = false;
bool lastButtonState = HIGH;
// Таблица цифр для семисегментника (0-9)
const byte digitMap[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 setup() {
pinMode(buttonPin, INPUT_PULLUP);
for (int i = 0; i < 8; i++) pinMode(segmentPins[i], OUTPUT);
for (int i = 0; i < 4; i++) pinMode(digitPins[i], OUTPUT);
}
void loop() {
// Обработка кнопки
bool currentButtonState = digitalRead(buttonPin);
if (currentButtonState == LOW && lastButtonState == HIGH) {
isDisplayOn = !isDisplayOn;
delay(50);
}
lastButtonState = currentButtonState;
// Вывод цифр на дисплей (динамическая индикация)
if (isDisplayOn) {
// Показываем число 1234 (или любое другое)
displayDigit(1, 0); // 1-й разряд (самый левый)
displayDigit(2, 1);
displayDigit(3, 2);
displayDigit(4, 3);
} else {
// Гасим все разряды
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], HIGH); // Для общего катода HIGH = выкл
}
}
}
void displayDigit(int num, int digitIndex) {
// Для общего катода: LOW активирует разряд, HIGH — выключает
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], HIGH);
}
digitalWrite(digitPins[digitIndex], LOW); // включаем нужный разряд
// Зажигаем сегменты для цифры (1 = HIGH, так как общий катод)
for (int s = 0; s < 7; s++) {
digitalWrite(segmentPins[s], digitMap[num][s]);
}
delay(3); // Небольшая задержка для устойчивости изображения
}