본문 바로가기
프로그래밍/임베디드

[아두이노] 3*4 Key Pad 사용법

by JR2 2021. 1. 7.

--------------------------

Chip : 아두이노 나노 
Program : Arduino IDE 1.8.13

 

Module : 3*4 KeyPad


--------------------------

 

3*4 KeyPad

 

keyboard button matrix keyboard 34/3X4 keyboard 12-key keyboard keyboard module, 단일옵션선택개

 

 

 

아래는 3*4 키패드의 핀구성도이다.

출처 : https://www.ardumotive.com/how-to-use-a-keypad-en.html

 

 

나는 Col0~Col2를 출력으로 쓰고,

Row0~Row3을 입력으로 쓰기로 했다.

(반대가 되어도 상관없다)

 

아래는 회로도이다.

 

KeyPad는 9핀이지만 양쪽을 제외한 가운데 7핀만 사용해서 구현할 수 있다.

 

아두이노는 자체적으로 내부 풀업 저항을 지원한다.

따라서 별다른 저항 없이도 회로를 꾸밀 수 있다.

https://hyun222.tistory.com/9

 

[전자회로] 스위치의 Pull-UP, Pull-Down

아두이노나 Atmega를 이용한 DIY시 스위치를 많이 쓰게된다. 결론부터 얘기하겠다. PULL UP 저항 OPEN 시 : 5V -> PB0 따라서 PB0는 HIGH CLOSE 시 : 5V -> GND, PB0 -> GND 따라서 PB0는 LOW PULL DOWN 저항 OP..

hyun222.tistory.com

 

나노 -> 키패드의 핀맵이다.

아두이노 나노 3*4 키패드
D6 PIN1(Col1)
D7 PIN2(Row0)
D8 PIN3(Col0)
D9 PIN4(Row3)
D10 PIN5(Col2)
D11 PIN6(Row2)
D5 PIN7(Row1)

 

 

아래는 구현 코드이다.

주석을 달아놨으니 이해가 될 것이다.

#define keyPad_col0 8 // 3*4 KeyPad Pin3
#define keyPad_col1 6 // 3*4 KeyPad Pin1
#define keyPad_col2 10 // 3*4 KeyPad Pin5
#define keyPad_row0 7 // 3*4 KeyPad Pin2
#define keyPad_row1 5 // 3*4 KeyPad Pin7
#define keyPad_row2 11 // 3*4 KeyPad Pin6
#define keyPad_row3 9 // 3*4 KeyPad Pin4

#define star 10 // Key Pad *
#define zero 11 // Key Pad 0
#define hash 12 // Key Pad #

int keyPad_NUM = 0; // 입력받은 숫자 저장

void setup() {
  // put your setup code here, to run once:
  pinMode(keyPad_col0, OUTPUT); // col0:2은 출력으로 지정해줘야함.
  pinMode(keyPad_col1, OUTPUT);
  pinMode(keyPad_col2, OUTPUT);
  pinMode(keyPad_row0, INPUT_PULLUP); // row0:3은 입력으로 지정해줘야함.
  pinMode(keyPad_row1, INPUT_PULLUP); // 아두이노의 내부 풀업저항 사용.
  pinMode(keyPad_row2, INPUT_PULLUP);
  pinMode(keyPad_row3, INPUT_PULLUP);

  Serial.begin(9600); // serial 통신시작

}

void loop() {
  // put your main code here, to run repeatedly:
  keyPad_NUM = 0; // 입력받은 값 초기화

  digitalWrite(keyPad_col0, HIGH); // col0:2 HIGH로 초기화
  digitalWrite(keyPad_col1, HIGH);
  digitalWrite(keyPad_col2, HIGH);

  digitalWrite(keyPad_col0, LOW); // col0을 low로 활성화 시켜 1,4,7,* 을 받아옴
  
  if(!(digitalRead(keyPad_row0))){ keyPad_NUM = 1; while(!(digitalRead(keyPad_row0))); }
  
  // col0,row0가 동시에 활성화 되면 1이 입력된 것으로 판단함. 눌렀다가 뗄 때 while에서 빠져나와서 다시 동작
  
  else if(!(digitalRead(keyPad_row1))){ keyPad_NUM = 4; while(!(digitalRead(keyPad_row1))); }
  
  else if(!(digitalRead(keyPad_row2))){ keyPad_NUM = 7; while(!(digitalRead(keyPad_row2))); }
  
  else if(!(digitalRead(keyPad_row3))){ keyPad_NUM = 10; while(!(digitalRead(keyPad_row3))); }
  
  else {}
  
  digitalWrite(keyPad_col0, HIGH); // col0를 HIGH로 초기화


	// ------------------------------------


  digitalWrite(keyPad_col1, LOW); // col0을 low로 활성화 시켜 2,5,8,0 을 받아옴
  
  if(!(digitalRead(keyPad_row0))){ keyPad_NUM = 2; while(!(digitalRead(keyPad_row0))); }
  
  // col1,row0가 동시에 활성화 되면 2가 입력된 것으로 판단함. 눌렀다가 뗄 때 while에서 빠져나와서 다시 동작
  
  else if(!(digitalRead(keyPad_row1))){ keyPad_NUM = 5; while(!(digitalRead(keyPad_row1))); }
  
  else if(!(digitalRead(keyPad_row2))){ keyPad_NUM = 8; while(!(digitalRead(keyPad_row2))); }
  
  else if(!(digitalRead(keyPad_row3))){ keyPad_NUM = 11; while(!(digitalRead(keyPad_row3))); }
  
  else {}
  
  digitalWrite(keyPad_col1, HIGH); // col1를 HIGH로 초기화
  
  // ------------------------------------

  digitalWrite(keyPad_col2, LOW); // col2을 low로 활성화 시켜 3,6,9,# 을 받아옴
  
  if(!(digitalRead(keyPad_row0))){ keyPad_NUM = 3; while(!(digitalRead(keyPad_row0))); }
  
  // col2,row0가 동시에 활성화 되면 3이 입력된 것으로 판단함. 눌렀다가 뗄 때 while에서 빠져나와서 다시 동작
  
  else if(!(digitalRead(keyPad_row1))){ keyPad_NUM = 6; while(!(digitalRead(keyPad_row1))); }
  
  else if(!(digitalRead(keyPad_row2))){ keyPad_NUM = 9; while(!(digitalRead(keyPad_row2))); }
  
  else if(!(digitalRead(keyPad_row3))){ keyPad_NUM = 12; while(!(digitalRead(keyPad_row3))); }
  
  else {}
  
  digitalWrite(keyPad_col2, HIGH); // col2를 HIGH로 초기화

  delay(10);
  
  Serial.println(keyPad_NUM); // 입력받은 값을 시리얼 모니터에 출력.
}

 

실행결과

1을 눌러보았다.

 

 

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음

댓글