https://plantuml.com/sequence-diagram



@startuml
actor       Actor       as Actor
participant ElevatorPanel    as ElevatorPanel
participant ElevatorCab as ElevatorCab
participant Driver      as Driver
participant Lights      as Lights
participant Door        as Door
participant Buttons     as Buttons
participant Elevator    as Elevator


activate Actor
activate Buttons
Driver          -> Buttons : elevio_callButton()
activate Driver
    ElevatorPanel   -> Driver
    activate ElevatorPanel
        Actor           -> ElevatorPanel : Button pressed
    deactivate ElevatorPanel
deactivate Driver
Driver          -> Buttons : elevio_stopButton()
activate Driver
    ElevatorPanel   -> Driver
    activate ElevatorPanel
        Actor           -> ElevatorPanel : Stop button pressed
    deactivate ElevatorPanel
deactivate Driver
Driver          -> Buttons : elevio_obstruction()
activate Driver
    ElevatorPanel   -> Driver
    activate ElevatorPanel
        Actor           -> ElevatorPanel : Obstruction activated
    deactivate ElevatorPanel
deactivate Driver
deactivate Actor

Buttons         -> Elevator : Check and update elevator inputs
deactivate Buttons

activate Door
activate Elevator
Elevator        -> Door : open_door()
Elevator        -> Door : close_door()
activate Lights
Elevator        -> Lights : Lights update from orderList
Elevator        -> Lights : Set light valid floor level

Elevator        -> Driver : Set motor direction
    activate Driver
    Driver      -> ElevatorCab : Set motor direction
        activate ElevatorCab
        deactivate ElevatorCab
    deactivate Driver
    deactivate Driver

Lights          -> Driver : elevio_buttonLamp()
activate Driver
deactivate Driver
Lights          -> Driver : elevio_floorIndicator()
activate Driver
deactivate Driver
deactivate Lights

Door            -> Driver : elevio_doorOpenLamp()
activate Driver
deactivate Driver
deactivate Door


@enduml

