타이머

스텝모터

버튼

포토 인터럽트

LED

서보모터

FND(7-segment)

부저

깃허브로 정리

구분 기능 설명
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. 안전한 출발/도착 시퀀스 - 출발 전 문 닫힘 → 일정 지연 후 모터 구동