아두이노

아두이노 시프트 레지스터 74HC165 입력 확장 가이드 – 버튼 8개 이상 제어하는 법

게임교수 2025. 4. 19. 17:36
반응형

아두이노 시프트 레지스터 74HC165 입력 확장 가이드 – 버튼 8개 이상 제어하는 법

아두이노로 버튼 입력을 10개 이상 받고 싶을 때, 핀이 부족하다면?
이럴 때 사용하는 부품이 바로 74HC165 시프트 레지스터입니다.
이 IC는 8개의 병렬 입력을 시리얼 데이터로 변환해주는 입력 확장 칩으로, 아두이노의 핀 3개만으로도 다수의 버튼을 제어할 수 있게 해줍니다.

📦 준비물

  • 아두이노 UNO
  • 74HC165
  • 푸시버튼 8개
  • 10kΩ 저항 (풀업용) 또는 INPUT_PULLUP 사용
  • 브레드보드, 점퍼 와이어

🔍 74HC165란?

74HC165는 병렬 입력을 시리얼 데이터로 변환해주는 8비트 시프트 레지스터입니다. LOAD(또는 SH/LD) 핀을 통해 외부 입력을 캡처하고, CLOCK과 함께 데이터핀으로 한 비트씩 읽어올 수 있습니다.
shiftIn() 함수를 통해 아두이노에서 손쉽게 값을 받을 수 있습니다.

⚙️ 핀 연결

74HC165 핀기능아두이노 연결
1 - SH/LD데이터 로드 (LOW에서 캡처)D8
2 - CLK시프트 클럭D13
9 - QH데이터 출력D12
15 - CE클럭 활성화GND
D0~D7버튼 연결푸시버튼 + 풀업저항
VCC / GND전원5V / GND

💻 아두이노 코드 예제 (8개 버튼 읽기)

int loadPin = 8;
int clockPin = 13;
int dataPin  = 12;

void setup() {
  Serial.begin(9600);
  pinMode(loadPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, INPUT);
}

void loop() {
  digitalWrite(loadPin, LOW);  // 데이터 캡처
  delayMicroseconds(5);
  digitalWrite(loadPin, HIGH); // 시프트 시작

  byte buttons = shiftIn(dataPin, clockPin, MSBFIRST);

  Serial.print("입력값: ");
  Serial.println(buttons, BIN);
  delay(500);
}

🔗 멀티 연결로 입력 확장하기

QH’ 핀(핀 7)을 다음 74HC165의 QH(핀 9)에 연결하면 16개 이상의 입력도 가능합니다.
shiftIn()을 2번 호출하거나, 직접 SPI 방식으로 데이터를 더 빠르게 읽을 수도 있습니다.

🧠 활용 아이디어

  • 🎮 아케이드 버튼판 입력 처리
  • 🎛️ 키패드 매트릭스 입력
  • 📟 보드 설정용 DIP 스위치 입력

❓ 자주 묻는 질문

  • Q: 버튼이 눌렸는데 값이 안 바뀝니다.
    A: 풀업 저항이 빠지거나, SH/LD 핀 신호가 없을 수 있습니다.
  • Q: shiftIn으로 읽는 값이 거꾸로예요.
    A: MSBFIRST vs LSBFIRST 설정을 확인하세요.

✅ 마무리

74HC165는 아두이노의 입력 확장을 위해 매우 유용한 IC입니다.
버튼 입력이 많은 프로젝트에서 포트를 절약하면서도 효율적으로 제어할 수 있으며, 74HC595와 함께 조합하면 완전한 입출력 확장 시스템을 만들 수 있습니다.


Arduino 시리즈 | 74HC165 제어 편 – 작성자: YT

반응형