이 저장소는 Arduino Uno용 3층 엘리베이터 시뮬레이터 스케치입니다. 주요 목적은
- 각 층 호출 버튼 동작(호출/취소)
- 호출 상태 표시(버튼 LED)
- 층간 이동 표시(YELLOW LED로 애니메이션)
- 현재 위치 표시(각 층 RED LED) 를 구현하여 TinkerCAD 또는 실제 보드에서 동작을 검증하는 것입니다.
이미지(제공된 과제)의 핵심 요구사항을 요약하면:
- 호출 기능: 각 층 호출 버튼으로 엘리베이터를 해당 층으로 이동
- 호출 취소: 호출 후 버튼을 다시 누르면 호출 취소(본 구현은 길게 누름(hold)으로 취소)
- 호출상태 표시: 버튼 누름 시 호출상태 LED ON, 도착/취소 시 OFF
- 이동 규칙: 같은 방향 우선(SCAN 스타일), 경유지 우선 등
- 위치 표시: 현재 층 LED ON, 이전 LED OFF
- 호출 기능: 구현됨 (버튼 짧게 누름 → 요청 등록)
- 호출 취소: 구현됨 (길게 누름(기본 1000ms) → 즉시 취소, 릴리스 시 재등록 방지)
- 호출상태 표시: 구현됨 (버튼 LED로 표시)
- 이동 규칙: 부분 구현 (SCAN 스타일 — 같은 방향 우선으로 처리)
- 위치 표시: 구현됨 (FLOOR_LED로 표시)
- 버튼 LED 깜박임 피드백과 요청 동기화를 하나의 함수로 통합하여 LED 업데이트 일관성 향상
- BETWEEN/FLOOR 버튼 LED 및 층 표시 LED에 대해 마지막 상태를 캐시해 불필요한 digitalWrite 호출을 줄임
- 이동(애니메이션) 코드에서 중복을 제거하여 유지보수성 향상
- LONG_PRESS_MS = 1000 // 길게 누름 취소 기준 (ms)
- CANCEL_PROTECT_MS = 500 // 취소 직후 재등록 차단 시간 (ms)
- MOVE_STEP_MS = 350 // 층 사이 애니메이션 단계 시간 (ms)
- Call buttons: D2, D3, D4
- Button indicator LEDs (call state): D5, D6, D7
- Floor (position) RED LEDs: D8, D9, D10
- Between-floor YELLOW LEDs: D11, D12, D13, A0 (1↔2: D11,D12 / 2↔3: D13,A0)
- Status (GREEN) LED: A1
- 보드 연결(Arduino Uno 선택)
elevator.ino파일을 열고 업로드- 업로드 후 시리얼 모니터(9600 baud)를 열어 로그 확인
- 기본 동작: 아무 호출 없이 시작하면 1층 LED가 켜진 상태로 대기
- 2층 호출: 2층 버튼을 짧게 누르면 버튼 LED ON → 엘리베이터가 2층으로 이동
- 이동 중 1층 호출: 이동 중 1층에서 호출 발생 → 같은 방향(UP)에 있는 3층 호출이 있으면 우선 처리, 그렇지 않으면 경로에 따라 처리
- 호출 취소: 호출 후 길게(>=1s) 누르면 즉시 버튼 LED가 빠르게 깜빡이며 요청 취소
- 취소 보호: 취소 직후 500ms 내에는 같은 버튼의 재등록이 무시됨
- 소스 코드:
elevator.ino(이 저장소에 포함) - 기능리스트: 구현된 항목과 미구현 항목 명시 (간단한 표)
- 테스트 결과: 각 테스트 시나리오의 수행 결과(로그/스크린샷 또는 동영상)
- 회로도 또는 TinkerCAD 링크: 시뮬레이션 공유 링크 또는 브레드보드 사진
- 발표자료(선택): 동작 시연 순서와 핵심 포인트를 정리한 슬라이드(간단한 PDF/이미지)
- 내부(엘리베이터 내부) 버튼과 홀 호출 분리 및 우선순위 처리
- 호출 취소를 길게 누름 대신 더 명확한 '취소 버튼'으로 분리
- EEPROM을 사용해 전원 재시작 후에도 호출 상태 보존
- TinkerCAD 회로도(.png)와 시뮬레이션 링크 첨부
원하시면 제가 이 README를 영어판으로 번역하거나, 제출용 한 페이지 요약(PDF)과 테스트 스크립트(단계별)까지 만들어 드립니다. 어떤 산출물을 먼저 원하시나요?
파일: elevator.ino (상단 주석에 핀/파라미터 설명 포함)
이 프로젝트를 TinkerCAD에서 재구성하셔서 시뮬레이션 링크와 회로 이미지를 제공해 주시면 README에 바로 연결해 드립니다. 아래는 공유 방법과 권장 구성입니다.
- TinkerCAD에서 회로 만들기(권장 부품)
- Arduino Uno
- 푸시버튼 x3 (각 층 호출)
- LED (RED) x3 (층 위치 표시)
- LED (RED or any) x3 (버튼 상태 표시) — 코드 상에서는 별도 핀에 연결
- LED (YELLOW) x4 (층간 이동 표시)
- 저항 220Ω~330Ω (각 LED에 직렬)
- 점퍼선 및 브레드보드
- 핀 매핑(코드와 일치시키려면)
- Buttons: D2, D3, D4 (사용 시 INPUT_PULLUP, 버튼은 한쪽을 GND에 연결)
- Button LEDs: D5, D6, D7
- Floor LEDs: D8, D9, D10
- Between LEDs: D11, D12, D13, A0
- Status LED: A1
- 시뮬레이션 공유(추천 순서)
- TinkerCAD에서 디자인을 저장한 뒤 우측 상단의 "Share" 버튼을 클릭
- 공개/보기 링크(Copy share link / Invite to view)를 생성하여 링크를 복사
- 추가로 회로 브레드보드 화면을 캡처(스크린샷)하여 이미지 파일(.png/.jpg)로 저장