| 구분 | 기능 설명 |
|---|---|
| 1. 층 이동 제어 (스텝모터 제어) | 버튼을 눌러 목표 층을 지정하면, 현재 층과 비교하여 위/아래 방향(MOTOR_CW / MOTOR_CCW)을 계산하고 일정 시간 후 모터가 회전 시작. 포토센서 감지 시 해당 층에서 정지. |
| 2. 포토센서 기반 도착 감지 | 각 층(1F, 2F, 3F)에 설치된 포토센서를 이용해 도착 여부를 판단. 엣지(변화) 감지를 통해 중복 인식 방지. |
| 3. 문 개폐 제어 (서보모터) | 도착 후 일정 시간 지연(ELEVATOR_ARRIVAL_DELAY_MS) 후 openDelayDoor()로 문을 자동 개방. 출발 전에는 문 닫힘 동작 수행. |
| 4. 부저 동작 (0.5초 알림음) | 층 도착 시 Buzzer_Beep500ms()로 부저 울림. 일정 시간(BUZZER_ON_MS) 후 자동으로 꺼짐. |
| 5. LED 층 표시 및 이동 애니메이션 | 이동 중 스텝모터의 회전 방향에 따라 LED가 한 칸씩 이동(쉬프트)하며, 도착 시 점멸(blinkRemain, blinkPhase)로 시각적 효과 표시. |
| 6. FND 층 표시기 | 현재 층(currentFloor)을 FND에 표시 (FND_ShowDigit() 사용). |
| 7. 논블로킹 구조 구현 | 인터럽트 타이머(TIM10, 1ms Tick)를 이용해 모든 동작을 동시에 진행 — delay나 while문 없이 병렬 처리. |
| 항목 | 기술적 설명 |
|---|---|
| 1. 논블로킹 상태 머신 구조 | 모든 동작이 Elevator_On1msTick() 안에서 상태 플래그(Pending, MsAcc)로 제어됨. HAL_Delay() 없이 멀티태스킹 가능. |
| 2. 타이머 기반 시간 제어 | starterMsAcc, arrivalMsAcc, buzzerMsAcc 등 누적 시간 카운터를 통해 딜레이 없이 일정 시간 후 동작 수행. |
| 3. 하드웨어 추상화 구조 | GPIO, Timer, Buzzer, FND, Step Motor, Servo 등이 모듈별 함수(ledOn, Buzzer_On, stepMotorOneStep 등)로 분리되어 유지보수 용이. |
| 4. 안정적인 센서 입력 처리 | prevF1, prevF2, prevF3로 이전 상태 저장 → 변화(edge) 감지만 허용 → 센서 잡음(채터링) 방지. |
| 5. 방향/층 상태 관리 구조화 | motorPending, targetFloor, currentFloor, starterPending, arrivalPending 등으로 엘리베이터 상태를 명확히 구분. |
| 6. One-Hot LED 제어 | LED_WriteOneHot() 함수로 한 번에 한 개의 LED만 켜서 층 이동 방향을 시각적으로 표현. |
| 7. 안전한 출발/도착 시퀀스 | - 출발 전 문 닫힘 → 일정 지연 후 모터 구동 |