I would not represent each floor as a separate state. States are associated with a set of behavior which is different from the behavior of other states. Generally, a lift does not behave differently at floor 1 versus floor 2. So I don't think floors make good states.
I would start with three states: Idle, Loading, and Moving. The Idle state is when there are no destinations. The Loading state is while the passengers are loading or unloading. On entry to the Loading state the lift will open the doors. On exit from Loading, close the doors. The Moving state is while the lift is travelling to a destination. On entry/exit from the Moving state the lift starts/stops the motor.
The events that cause transitions between states include the floor buttons (inside the lift) and the call buttons (the up/down buttons) at each floor. Another event occurs when the moving lift reaches each floor. The floor number is data that is included with these events.
When the Idle state receives a button event it compares the floor number with the current floor. If the button event floor number is equal to the current floor then transition to the Loading state. If the button event floor number is different from the current floor then add the floor number to the destination list and transition to the Moving state.
When the Loading state receives a button event it compares the floor number with the current floor. If the button event floor number is different from the current floor then add the floor to the destination list and transition to the Moving state.
When the Moving state receives a button event it adds the floor to the destination list. When the Moving state receives the reached-floor event it updates the current floor and compares with the destination list. If the reached floor is a destination then remove the destination from the list and transition to the Loading state.
The tricky part will be managing the destination list. My first thought was that a linked-list data structure would be useful. Destinations could get prioritized and sorted as they are added to the list such that the first item in the list is the next destination. But that may be too complicated. A simpler idea may be to keep two separate arrays of destinations, one array for each direction. There is an element in the array for each floor. If the floor is a destination while traveling in a particular direction then the corresponding array element is true. The point is that there is more than one way to do it and I don't know what will work best. You're going to have to iterate on the design and the logic.
One of the nice things about this state machine design is that it easily extends to support any number of floors. In other words, you don't have to add new states and events when you add floors.