-
아두이노 라이브러리 | 키패드 Keypad.hTechnology/Arduino 2024. 6. 21. 18:00
1. 키패드
키패드 여러 개의 스위치로부터 디지털 신호를 받기 위해서는 스위치 개수만큼의 디지털 입력 핀이 필요하다. 스위치 16개로 구성된 패드가 있다면 16개의 디지털 입력 핀이 필요한 셈이다. 하지만 스위치를 위 그림과 같이 행렬 형태로 배치하고 키 스캔(Key Scan) 알고리즘을 적용하면 더 적은 수의 입출력 핀을 사용하더라도 어느 스위치가 눌렸는지 알 수 있다. 키패드는 이와 같이 행렬 형태로 배열된 스위치 모음으로, 각 스위치의 두 단자는 행 전선과 열 전선에 각각 연결되어 있다. 위 그림과 같은 4×4 키패드에서 6번 스위치를 누르면 행 2번 전선과 열 3번 전선이 전기적으로 연결된다. 이때 키 스캔 알고리즘에 의해 행 1번 전선부터 행 4번 전선까지 디지털 신호를 보냈을 때, 열 1번 전선부터 열 4번 전선까지 디지털 신호를 입력 받아 눌린 스위치의 위치를 판별한다. 이번 예제에서 사용할 4×4 키패드는 아래 링크로 접속하면 구매할 수 있다.
만능 멤브레인 키패드 4X4-D
초슬림 메탈돔 방식의 멤브레인 키패드 입니다. 양면테이프가 있어 어디에든 부착이 쉬우며, 케이블이 얇아 작은 틈으로 활용이 좋습니다.
www.devicemart.co.kr
2. 아두이노 라이브러리 추가
아두이노 라이브러리 Keypad 설치 아두이노 플랫폼에 키 스캔 알고리즘이 라이브러리 형태로 구현되어 있다. 그러나 기본적으로 제공되는 라이브러리는 아니기 때문에, 라이브러리를 IDE에 추가하는 과정이 필요하다. 아두이노 IDE 상단 툴바에서 '툴'을 선택한 뒤 '라이브러리 관리' 항목을 선택하자. 그러면 곧이어 '라이브러리 매니저' 창이 나타난다. '라이브러리 매니저' 창 오른쪽 상단에 라이브러리 이름을 입력하면 아두이노 플랫폼에서 지원하는 라이브러리를 검색할 수 있다. 해당 칸에 우리가 이번 예제에서 사용할 라이브러리 'Keypad'를 입력하자. 라이브러리를 검색하면 입력한 검색어와 관련된 라이브러리 목록이 나타난다. 키패드를 사용하기 위한 다양한 라이브러리가 있지만, 해당 예제에서는 라이브러리 'Keypad' 버전 3.1.1을 설치하도록 하겠다. 아래 링크로 접속하면 해당 라이브러리에 대한 설명과 사용방법을 확인할 수 있다.
Arduino Playground - Keypad Library
#include const byte ROWS = 4; //four rows const byte COLS = 3; //three columns char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'#','0','*'} }; byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
playground.arduino.cc
3. 예제
3.1. 회로 구성
회로 구성 3.2. 프로그램 작성
#include <Keypad.h> // 키패드 라이브러리 추가 const byte Rows = 4; // 바이트 변수 선언 후 키패드 행의 개수로 초기화 const byte Cols = 4; // 바이트 변수 선언 후 키패드 열의 개수로 초기화 // 문자형 2차원 배열 선언 후 키패드 값으로 초기화 char KeyValues[Rows][Cols] = { '1','2','3','A', '4','5','6','B', '7','8','9','C', '*','0','#','D' }; // 바이트 배열 선언 후 키패드 행 단자와 연결된 디지털 입출력 핀으로 초기화 byte RowPins[Rows] = {12, 11, 10, 9}; // 바이트 배열 선언 후 키패드 열 단자와 연결된 디지털 입출력 핀으로 초기화 byte ColPins[Cols] = {8, 7, 6, 5}; // UserKeypad라는 이름의 키패드 객체를 생성 Keypad UserKeypad = Keypad(makeKeymap(KeyValues), RowPins, ColPins, Rows, Cols); void setup() { Serial.begin(9600); // 시리얼 통신 시작 (통신 속도: 9600 bps) } void loop() { // 문자형 변수 선언 후, 키패드에서 눌린 스위치에 해당하는 키패드 값 저장 char PressedKey = UserKeypad.getKey(); if (PressedKey != NO_KEY) // 변수에 저장된 값이 NO_KEY가 아닐 경우 실행 { Serial.print("Pressed Key: "); // 시리얼 모니터에 문자열 출력 Serial.println(PressedKey); // 시리얼 모니터에 변수에 저장된 값을 출력한 뒤 줄 바꿈 } }
[함께 읽으면 좋은 페이지]
아두이노 프로젝트 | 디지털 도어락
1. 디지털 도어락 일상에서 쉽게 발견할 수 있는 디지털 도어락을 아두이노 플랫폼으로 구현해보자. 구현하고자 하는 디지털 도어락은 키패드와 수동 피에조 부저, LCD I2C 모듈로 구성되어 있
vedacube.tistory.com
참고문헌
- 최훈. (2022). 팅커캐드 & 아두이노. 길벗캠퍼스.
- DroneBot Workshop. (2020). Using Keypads with Arduino - Build and Electronic Lock. YouTube. https://www.youtube.com/watch?v=vl1-R6NsejM. 2023.11.06.
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 | 온도센서 TMP36 (1) 2024.07.05 아두이노 프로젝트 | 디지털 도어락 (0) 2024.06.28 아두이노 I2C 통신 | LCD I2C 모듈 LiquidCrystal_I2C.h (1) 2024.06.14 아두이노 라이브러리 | LCD 모듈 LiquidCrystal.h (0) 2024.04.12 아두이노 프로젝트 | 디지털 타이머 (0) 2024.04.05