아두이노 16x2 LCD와 키패드로 계산기 만들기
부품 및 소모품
| 부품 |
수량 |
| 아두이노 우노 (버전 무관) |
1 |
| 16x2 LCD 디스플레이 |
1 |
| 4x4 키패드 |
1 |
| 9V 배터리 |
1 |
| 브레드보드 및 연결 와이어 |
1 |
프로젝트 소개
이 프로젝트를 완료하면 16x2 LCD와 키패드를 아두이노와 함께 사용하는 방법과, 이미 준비된 라이브러리를 활용해 프로그래밍하는 것이 얼마나 쉬운지 알게 됩니다. 또한 특정 작업을 수행하도록 아두이노를 프로그래밍하는 방법도 이해하게 됩니다.
필요 재료
- 아두이노 우노 (모든 버전 가능)
- 16x2 LCD 디스플레이
- 4x4 키패드

핀 연결
| 아두이노 핀 |
연결 |
| D0 |
키패드 1번 핀 |
| D1 |
키패드 2번 핀 |
| D2 |
키패드 3번 핀 |
| D3 |
키패드 4번 핀 |
| D4 |
키패드 5번 핀 |
| D5 |
키패드 6번 핀 |
| D6 |
키패드 7번 핀 |
| D7 |
키패드 8번 핀 |
| D8 |
LCD 레지스터 셀렉트 핀 (핀 4) |
| D9 |
LCD 인에이블 핀 (핀 6) |
| D10 |
LCD 데이터 핀 4 (핀 11) |
| D11 |
LCD 데이터 핀 5 (핀 12) |
| D12 |
LCD 데이터 핀 6 (핀 13) |
| D13 |
LCD 데이터 핀 7 (핀 14) |
| +5V |
LCD Vdd 핀 (핀 2) |
| GND |
LCD Vss, Vee, RW 핀 (핀 1, 3, 5) |
참고: 일부 아두이노 보드는 핀 0, 1에 무언가 연결되어 있으면 업로드 시 오류가 발생할 수 있습니다. 업로드 시 문제가 있으면 키패드를 잠시 분리하세요.
연결 완료 후 하드웨어 모습:

코드
아두이노 키패드 계산기 프로그램
/*
* 아두이노 키패드 계산기 프로그램
*/
#include <LiquidCrystal.h> // LCD 라이브러리: https://www.arduino.cc/en/Reference/LiquidCrystal
#include <Keypad.h> // 키패드 라이브러리: https://github.com/Chris--A/Keypad
const byte ROWS = 4; // 4행
const byte COLS = 4; // 4열
// 키맵 정의
char keys[ROWS][COLS] = {
{'7','8','9','D'},
{'4','5','6','C'},
{'1','2','3','B'},
{'*','0','#','A'}
};
byte rowPins[ROWS] = {0, 1, 2, 3}; // 키패드 ROW0-ROW3 연결 핀
byte colPins[COLS] = {4, 5, 6, 7}; // 키패드 COL0-COL3 연결 핀
Keypad kpd = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // LCD 연결 핀
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long Num1, Num2, Number;
char key, action;
boolean result = false;
void setup() {
lcd.begin(16, 2); // 16x2 LCD 사용
lcd.print("DIY Calculator"); // 시작 메시지
lcd.setCursor(0, 1);
lcd.print("-CircuitDigest");
delay(2000);
lcd.clear();
}
void loop() {
key = kpd.getKey(); // 눌린 키 저장
if (key != NO_KEY) DetectButtons();
if (result == true) CalculateResult();
DisplayResult();
}
void DetectButtons() {
lcd.clear();
if (key == '*') { // 취소 버튼
Serial.println("Button Cancel");
Number = Num1 = Num2 = 0;
result = false;
}
if (key == '1') { Serial.println("Button 1"); if (Number == 0) Number = 1; else Number = (Number * 10) + 1; }
if (key == '4') { Serial.println("Button 4"); if (Number == 0) Number = 4; else Number = (Number * 10) + 4; }
if (key == '7') { Serial.println("Button 7"); if (Number == 0) Number = 7; else Number = (Number * 10) + 7; }
if (key == '0') { Serial.println("Button 0"); if (Number == 0) Number = 0; else Number = (Number * 10) + 0; }
if (key == '2') { Serial.println("Button 2"); if (Number == 0) Number = 2; else Number = (Number * 10) + 2; }
if (key == '5') { Serial.println("Button 5"); if (Number == 0) Number = 5; else Number = (Number * 10) + 5; }
if (key == '8') { Serial.println("Button 8"); if (Number == 0) Number = 8; else Number = (Number * 10) + 8; }
if (key == '#') { Serial.println("Button Equal"); Num2 = Number; result = true; }
if (key == '3') { Serial.println("Button 3"); if (Number == 0) Number = 3; else Number = (Number * 10) + 3; }
if (key == '6') { Serial.println("Button 6"); if (Number == 0) Number = 6; else Number = (Number * 10) + 6; }
if (key == '9') { Serial.println("Button 9"); if (Number == 0) Number = 9; else Number = (Number * 10) + 9; }
if (key == 'A' || key == 'B' || key == 'C' || key == 'D') { // 4열 연산자 키
Num1 = Number;
Number = 0;
if (key == 'A') { Serial.println("Addition"); action = '+'; }
if (key == 'B') { Serial.println("Subtraction"); action = '-'; }
if (key == 'C') { Serial.println("Multiplication"); action = '*'; }
if (key == 'D') { Serial.println("Division"); action = '/'; }
delay(100);
}
}
void CalculateResult() {
if (action == '+') Number = Num1 + Num2;
if (action == '-') Number = Num1 - Num2;
if (action == '*') Number = Num1 * Num2;
if (action == '/') Number = Num1 / Num2;
}
void DisplayResult() {
lcd.setCursor(0, 0);
lcd.print(Num1);
lcd.print(action);
lcd.print(Num2);
if (result == true) {
lcd.print(" =");
lcd.print(Number);
}
lcd.setCursor(0, 1);
lcd.print(Number);
}
회로도
