3층 건물의 엘리베이터를 Arduino로 구현한 시뮬레이터입니다. LED와 버튼을 사용하여 실제 엘리베이터의 동작을 시각적으로 표현합니다.
project-arduino-elevator/
├── src/
│ └── oneday_elevator/
│ └── oneday_elevator.ino # 메인 Arduino 코드
├── docs/ # 프로젝트 문서
└── README.md # 프로젝트 설명서
- 1층, 2층, 3층 지원
- 각 층별 호출 버튼 및 상태 LED
- 엘리베이터 위치를 7개 LED로 시각적 표현
- 각 층에서 엘리베이터 호출 가능
- 호출 상태에 따른 LED 표시
- 호출 취소 기능 (버튼 재누름)
- 현재 위치와 호출 층을 고려한 최적 경로 선택
- 방향 우선순위 기반 이동 (위쪽 호출 → 아래쪽 호출)
- 호출이 없을 때 자동 정지
- 층별 버튼: 11, 12, 13번 핀 (1층, 2층, 3층)
- 층별 LED: 8, 9, 10번 핀 (1층, 2층, 3층 호출 상태)
- 엘리베이터 LED: A0, 2, 3, 4, 5, 6, 7번 핀 (엘리베이터 위치 표시)
층별 버튼:
- 1층: 11번 핀
- 2층: 12번 핀
- 3층: 13번 핀
층별 LED (호출 상태):
- 1층: 8번 핀
- 2층: 9번 핀
- 3층: 10번 핀
엘리베이터 위치 LED:
- 1층: A0, 2, 3번 핀
- 2층: 4, 5번 핀
- 3층: 6, 7번 핀
- 모든 핀을 입력/출력 모드로 설정
- 1층에서 시작 (A0 핀 LED 켜짐)
- 시리얼 통신 시작 (9600 baud)
- 호출 감지: 각 층 버튼 상태 확인
- 방향 결정: 현재 위치와 호출 층을 고려한 이동 방향 계산
- 목표 층 탐색: 가장 적절한 목적지 선택
- 엘리베이터 이동: 500ms 간격으로 LED 이동
- 버튼 상태 변화 감지 (LOW → HIGH)
- 호출 상태 토글 및 LED 제어
- 디바운싱 처리
- 현재 층보다 위쪽 호출 우선 확인
- 위쪽 호출이 없으면 아래쪽 호출 확인
- 호출이 없으면 정지 (0 반환)
- 현재 이동 방향에 따른 최적 경로 선택
- 위로 이동 중: 위쪽 호출 → 아래쪽 호출 순서
- 아래로 이동 중: 아래쪽 호출 → 위쪽 호출 순서
- 500ms 간격으로 LED 한 칸씩 이동
- 층에 도달 시 호출 상태 확인
- 호출이 있으면 정차 및 호출 해제
- 새로운 호출이 있으면 경로 재계산
- 1층: A0, 2, 3번 핀 (인덱스 0, 1, 2)
- 2층: 4, 5번 핀 (인덱스 3, 4)
- 3층: 6, 7번 핀 (인덱스 5, 6)
- 호출 중: 해당 층 LED 켜짐
- 호출 해제: 해당 층 LED 꺼짐
int currentFloor = 0; // 현재 층 (0: 1층, 1: 2층, 2: 3층)
int targetFloor = -1; // 목표 층
int currentIndex = 0; // 현재 LED 인덱스 (0~6)
int targetIndex = -1; // 목표 LED 인덱스
int direction = 0; // 이동 방향 (0: 정지, 1: 위, -1: 아래)
bool call[3] = {false, false, false}; // 각 층 호출 상태
bool isMoving = false; // 이동 중 여부- 1층에 있는 엘리베이터가 있을 때 3층 호출 후 2층 호출
- 3층에 있는 엘리베이터가 있을 때 1층 호출 후 2층 호출
- 1층에 있는 엘리베이터가 있을 때 3층 호출 후 호출 취소
프로젝트 발표 자료: Google Slides

