# Elevator FSM # Control the elevator's position and doors. elevator States: IDLE waiting for the beginning of the round WAIT_JACK_IN waiting for the jack INIT init the elevator position and open door GO_TO_POS_X go to a position to be ready to get a new puck WAIT_A_PUCK waiting for a new puck (hurry up filter bridge!) WAIT_POS_ORDER waiting for position order (depending where we want to drop our column) GO_TO_POS_Y go to a position + 1cm to be ready to release pucks WAIT_FOR_RELEASE_ORDER ready to open doors at your command LAND_ELEVATOR land elevator to the ground MINI_CLOSE[timeout=45] try to unblock pucks OPEN_DOORS[timeout=675] releasing pucks WAIT_FOR_CLOSE_ORDER ready to close doors at your command CLOSE_DOORS[timeout=675] closing the elevator's doors Events: start io power on! jack_inserted_into_bot jack into the bot in_position elevator is in position new_puck we received a new puck from FB (filter bridge, not facebook) order_bypass Dont wait to have 4 pucks but we wait we don't have puck before bridge order_received we received a new order doors_opened doors are opened state_timeout IDLE: start -> WAIT_JACK_IN waiting for jack WAIT_JACK_IN: jack_inserted_into_bot -> INIT open doors. find the zero of the elevator. INIT: doors_opened -> GO_TO_POS_X doors opened, close doors. GO_TO_POS_X: in_position -> WAIT_A_PUCK # FIXME, we should go to a WAIT_FIRST_POS because we are not really ready to # load some pucks (but this will not happen...). elevator in position zero, move to first position. WAIT_A_PUCK: new_puck: ok_for_other_pucks -> GO_TO_POS_X incrementing nb_puck var update elevator position to get a new puck new_puck: not_ok_for_other_pucks -> WAIT_POS_ORDER incrementing nb_puck var no more time to wait a new puck order_bypass -> GO_TO_POS_Y elevator filling has been shut, get ready to drop pucks WAIT_POS_ORDER: order_received -> GO_TO_POS_Y go to position Y GO_TO_POS_Y: in_position -> WAIT_FOR_RELEASE_ORDER ready to release pucks at altitude Y WAIT_FOR_RELEASE_ORDER: order_received -> LAND_ELEVATOR make the elevator touch the target zone LAND_ELEVATOR: in_position -> OPEN_DOORS release pucks to the target position (I hope) OPEN_DOORS: doors_opened -> WAIT_FOR_CLOSE_ORDER wait for close order state_timeout -> MINI_CLOSE try to unblock doors MINI_CLOSE: state_timeout -> OPEN_DOORS try to release pucks again WAIT_FOR_CLOSE_ORDER: order_received -> CLOSE_DOORS closing doors CLOSE_DOORS: state_timeout -> GO_TO_POS_X pucks are released and elevator is ready to make a new column