"아두이노 정밀 재단 및 키패드 적용" "아두이노 정밀 재단 및 키패드 치수 적용 적용된 치수가 엔코더 읽어옴 그 치수가 동일 하면 릴레이 작동"
코딩 설계지 : 이진주방산업
코딩 자료
- 엔코더 숫자: LCD 하단에 표시
- 키패드 숫자: LCD 상단에 표시
- 11번 핀 ON/OFF: 키패드 숫자 = 엔코더 숫자일 때만 HIGH
- 입력 초기화, 완료, 신호 출력 기능 유지
- 사용 목적
- 정확한 치수 표시
- 정밀 재단기 제작
- 🔹 아두이노 UNO 핀 번호 정리
|
부품
|
핀/선
|
아두이노 UNO 핀
|
|
I2C LCD
|
SDA
|
A4
|
|
SCL
|
A5
|
|
|
VCC
|
5V
|
|
|
GND
|
GND
|
|
|
4x4 Keypad
|
Row 1
|
2
|
|
Row 2
|
3
|
|
|
Row 3
|
4
|
|
|
Row 4
|
5
|
|
|
Col 1
|
6
|
|
|
Col 2
|
7
|
|
|
Col 3
|
8
|
|
|
Col 4
|
9
|
|
|
Rotary Encoder
|
A (회전 신호)
|
12
|
|
B (회전 신호)
|
13
|
|
|
VCC
|
5V
|
|
|
GND
|
GND
|
|
|
신호 출력
|
핀 10 (기존 신호)
|
10
|
|
키패드=엔코더 동일시 ON
|
핀 11
|
11
|
모터 연결 코딩시 목표 치수에서 가감속 기능 첨가 하시면 더 정밀한 재단기 또는 치수를 제어 할 수 있습니다.
치수 오차 0.01

1. 라이브러리 포함
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Keypad.h>
- Wire.h: I2C 통신을 위한 라이브러리.
- LiquidCrystal_I2C.h: I2C 방식 LCD 제어용 라이브러리.
- Keypad.h: 키패드 입력 처리용 라이브러리.
2. 키패드 설정
const byte ROWS = 4; const byte COLS = 4; char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {2, 3, 4, 5}; byte colPins[COLS] = {6, 7, 8, 9}; Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
- 4x4 키패드 구성.
- 각 행과 열 핀 설정.
- 키패드 객체 생성.
3. LCD 설정
LiquidCrystal_I2C lcd(0x27, 16, 2);
- I2C 주소 0x27, 16x2 LCD 생성.
4. 입력 및 출력용 변수
char input[17]; // 키패드 입력 저장 byte indexInput = 0; const int signalPin = 10; // 신호 출력용 const int matchPin = 11; // 키패드 숫자와 엔코더 값이 일치 시 ON
5. 엔코더 설정
const int encA = 12; const int encB = 13; int encoderPos = 0; int pinALast; int aVal;
- 로터리 엔코더 A, B 핀 설정.
- 엔코더 위치를 encoderPos로 추적.
6. setup() 함수
lcd.init(); lcd.backlight(); pinMode(signalPin, OUTPUT); digitalWrite(signalPin, LOW); pinMode(matchPin, OUTPUT); digitalWrite(matchPin, LOW); pinMode(encA, INPUT_PULLUP); pinMode(encB, INPUT_PULLUP); pinALast = digitalRead(encA); lcd.setCursor(0, 0); lcd.print("Input / Encoder"); lcd.setCursor(0, 1); lcd.print(encoderPos); Serial.begin(9600);
- LCD 초기화 및 백라이트 켜기.
- 신호 및 매치 핀 초기화.
- 엔코더 핀 입력 설정.
- 초기 LCD 화면: 상단 "Input / Encoder", 하단 엔코더 값 표시.
- 시리얼 통신 시작.
7. loop() 함수
7-1. 엔코더 처리
aVal = digitalRead(encA); if (aVal != pinALast) { if (digitalRead(encB) != aVal) encoderPos++; else encoderPos--; lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(encoderPos); Serial.print("Encoder: "); Serial.println(encoderPos); } pinALast = aVal;
- 엔코더 회전 방향 감지 후 encoderPos 증가/감소.
- LCD와 시리얼 모니터에 실시간 출력.
7-2. 키패드 처리
char key = keypad.getKey(); if (key != NO_KEY) { // 초기화 if (key == 'C' || key == '#' || key == 'D') { ... } // 입력 완료 if (key == '*') { ... } // 신호 출력: B if (key == 'B') { ... } // 숫자 입력 if ((key >= '0' && key <= '9')) { ... } }
- C, #, D 키: 입력 초기화, LCD와 매치핀 리셋.
- *: 입력 완료, 입력값 시리얼 출력.
- B: 입력값 또는 엔코더 값만큼 signalPin에 신호 출력.
- 0~9 숫자 키: input 배열에 저장, LCD 상단에 표시.
7-3. 키패드 입력과 엔코더 비교
if (indexInput > 0) { int keypadValue = atoi(input); if (keypadValue == encoderPos) digitalWrite(matchPin, HIGH); else digitalWrite(matchPin, LOW); } else { digitalWrite(matchPin, LOW); }
- 입력값과 엔코더 값이 같으면 matchPin ON, 다르면 OFF.
- 입력값 없으면 OFF.
✅ 코드 요약
- 키패드 입력으로 숫자를 받고 LCD에 표시.
- 로터리 엔코더로 값 증가/감소를 실시간 표시.
- 입력값과 엔코더 값이 일치하면 특정 핀(matchPin) 활성화.
- B키를 눌러 입력값/엔코더 값만큼 신호를 출력(signalPin).
- C, #, D 키로 입력 초기화, * 키로 입력 완료.
'자유게시판' 카테고리의 다른 글
| 🌟 2026년 성주군과 청년을 위한 정부 지원금, 놓치지 마세요! (0) | 2025.10.12 |
|---|---|
| 윤민수, 전처와 ‘이혼파티’ 연다…母 깊은 한숨 “저리 살면 안 되겠나” (0) | 2025.10.12 |
| 아두이노 정밀 치수 확인 및 재단기 코딩 (0) | 2025.10.12 |
| 창업 순서 완벽 가이드 (0) | 2025.10.12 |
| 🏡 여주 점동면 단층 단독주택 매매 안내 (0) | 2024.01.07 |