본문 바로가기
Arduino/Arduinio기초 실습

12장. 키 매트릭스, 수동 부저 실습

by sinki 2022. 4. 11.

실습은 개인 학습을 위해 "주) 엘케이 임베디드" 사이트에서 구매한 아두이노 코딩 배우기 고급 키트를 이용한 학습입니다. 동봉된 책을 기반으로 학습하면서 개인적인 궁금증과 추가 필요한 부분을 정리한 블로그임을 미리 알려드립니다.

 

< 준비물 >

아두이노 우노 : 1개

USB 케이블  : 1개 

점퍼 케이블(숫숫) : 2개

점퍼 케이블(숫암) : 8개

브레드 보드 : 1개, 830홀 사용

키 매트릭스 모듈(4 X 4) : 1개

수동 부저  : 1개

 

키 매트릭스의 키들에 고유의 톤값을 가지도록 지정하고 부저를 통해 부저음을 출력하는 실습입니다.

팅커 캐드 링크입니다 : https://www.tinkercad.com/things/fntSRjVEKfX

 

< 참고 지식 >

⦿ 키 매트릭스 (Key Matrix) 모듈

다수의 수위치(16개)를 행과 열로 배열한 방식으로 회로를 구성한 모듈이며 8개의 입력 핀을 사용하여 16개의 키 입력을 받을 수 있는 매우 효율적인 회로 구성입니다.

⦿ 수동 부저 (Passive Buzzer) 모듈

전기적 신호를 소리 신호로 바꿔 주는 대표적인 사운드 부품입니다.

⦿ 키패드 라이브러리 설치

코드에서 사용하는 "Keypad.h"를 사용하기 위해 Keypad 라이브러리를 설치해야 합니다.  툴 메뉴 아래 라이브러리 관리 선택합니다.

검색창에서 "Keypad" 검색 후 항목에서 Keypad "설치" 클릭하시면 라이브러리가 설치됩니다.

< 실습 코드 >

#include <Keypad.h>  //키 매트릭스 모듈 사용을 위한 헤더 파일
int Buzzer_Pin = 3;     // 3번 핀에  수동 부저 연결
int Tones[8] = {261, 261, 294, 330, 349, 392, 440, 494};  // 부저의 톤값 지정
int Tones_Number;   // 톤이 들어갈 변수 
char key;                   // 현재 키값 변수
char key_h;              // 키 값 유지 변수
KeyState key_c;      // 키 상태 값 변수
const byte ROWS = 4;  // 키 좌표값(행)
const byte COLS = 4;  // 키 좌표값(열)
char keys[ROWS][COLS] = {.   // 스위치 설정값
  {0,1,2,3},
  {4,5,6,7},
  {8,9,10,11},
  {12,13,14,15}
};
byte rowPins[ROWS] = {7, 6, 5, 4};  // 핀 번호 
byte colPins[COLS] = {8, 9, 10, 11}; // 핀 번호 

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
 // 키보드 사용 전 설정 및 준비
void setup()
{
}

void loop()
{
  key = keypad.getKey();         // 키보드 값 읽어오기
  key_c = keypad.getState();   // 키보드 상태 읽어오기
  if (key != NO_KEY).        // 만약 새로운 키값이 들어오면 
  {
    key_h = key;                // 새로운 키값을 key_h에 입력
  }
  if (key_c == 0).            // 만약 입력이 없을 때
  {
    noTone(Buzzer_Pin);   // 수동 부저 OFF
  }
  else.     // 입력이 있을 때 
  {
    if (key_h > 7 ) key_h = 0;    // 입력값이 7보다 크면 입력값을 0으로 만들어라 
    tone(Buzzer_Pin, Tones[key_h]);   // 돌아온 입력값에 해당되는 톤값의 소리를 출력하라
   }
}