// Параметры для сдвигового регистра
const int dataPin = 2;    // Пин подключен к пину "DS" (Data Serial) сдвигового регистра
const int clockPin = 3;   // Пин подключен к пину "SH_CP" (Clock Pulse) сдвигового регистра
const int latchPin = 4;   // Пин подключен к пину "ST_CP" (Store Clock) сдвигового регистра

// Количество входов в сдвиговом регистре (в данном случае 8)
const int numInputs = 8;

// Массив для хранения состояний кнопок
bool buttonStates[numInputs];

void setup() {
  // Настройка пинов для сдвигового регистра
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, INPUT);

  // Инициализация серийного порта для вывода результатов
  Serial.begin(9600);
}

void loop() {
  // Считываем состояние кнопок
  readButtons();

  // Обработка нажатий кнопок
  for (int i = 0; i < numInputs; i++) {
    if (buttonStates[i]) {
      Serial.print("Кнопка ");
      Serial.print(i + 1);
      Serial.println(" нажата");
      // Здесь вы можете выполнить дополнительные действия в ответ на нажатие
    }
  }
  
  delay(100); // Задержка для стабильного чтения кнопок
}

void readButtons() {
  // Считываем состояние кнопок с помощью сдвигового регистра
  digitalWrite(latchPin, LOW);
  delayMicroseconds(5);
  digitalWrite(latchPin, HIGH);
  
  for (int i = numInputs - 1; i >= 0; i--) {
    buttonStates[i] = shiftIn(dataPin, clockPin, MSBFIRST) == HIGH;
  }
}
74HC165