Загрузка данных


// Полный код без библиотеки 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); // Небольшая задержка для устойчивости изображения
}