산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 16x2 LCD와 키패드로 계산기 만들기

부품 및 소모품

부품 수량
아두이노 우노 (버전 무관) 1
16x2 LCD 디스플레이 1
4x4 키패드 1
9V 배터리 1
브레드보드 및 연결 와이어 1

프로젝트 소개

이 프로젝트를 완료하면 16x2 LCD와 키패드를 아두이노와 함께 사용하는 방법과, 이미 준비된 라이브러리를 활용해 프로그래밍하는 것이 얼마나 쉬운지 알게 됩니다. 또한 특정 작업을 수행하도록 아두이노를 프로그래밍하는 방법도 이해하게 됩니다.

필요 재료

아두이노 16x2 LCD와 키패드로 계산기 만들기

핀 연결

아두이노 핀 연결
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에 무언가 연결되어 있으면 업로드 시 오류가 발생할 수 있습니다. 업로드 시 문제가 있으면 키패드를 잠시 분리하세요.

연결 완료 후 하드웨어 모습:

아두이노 16x2 LCD와 키패드로 계산기 만들기

코드

아두이노 키패드 계산기 프로그램

/*
 * 아두이노 키패드 계산기 프로그램
 */
#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);
}

회로도

아두이노 16x2 LCD와 키패드로 계산기 만들기

제조공정

  1. 밀대: 에트루리아 기원에서 현대 장인정신까지
  2. 현대 볼링 핀의 진화와 장인정신
  3. USB HID 공격 방지: 아두이노 레오나르도 키보드 익스플로잇 시연
  4. 아두이노 우노로 Atmel AT89 시리즈 손쉽게 프로그래밍하기 - 단계별 가이드
  5. 블루투스 제어 아두이노 스파이봇(Spybot) 만들기
  6. 아두이노로 RC 수신기 PPM 신호 디코딩하기: 단계별 가이드
  7. 플릭모트(FlickMote): 스마트 홈을 위한 제스처 제어 IR 리모컨
  8. DIY 아두이노 TV B-Gone: 모든 TV를 끄는 만능 리모컨
  9. 아두이노로 만드는 대형 LED 마스터 시계 (알람 기능 포함, 12m 거리에서도 식별 가능)
  10. 아두이노 우노로 25kHz 4핀 PWM 팬 제어하기 - 제작, 코드 및 테스트