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