2014-09-17 2 views
0

Я пытаюсь реализовать FSM, который обрабатывает кнопку следующим образом:государственное дублирование в ФОМ

Когда в режиме ожидания, он просто ждет кнопки, чтобы получить нажатый.

Когда он нажат, он переходит в состояние intButtonPress, где запускается 2-секундный таймер. Если время ожидания, это означает, что кнопка удерживалась в течение 2 секунд, а следующее состояние должно быть действием. Если кнопка отпускается до истечения времени ожидания, состояние возвращается в режим ожидания, так как кнопка не удерживалась достаточно долго.

Когда в режиме действия выполняется какое-либо действие, его можно прервать нажатием кнопки. Проблема в том, что я не могу повторно использовать состояние intButtonPress, так как переход таймаута вернется в состояние Action, поэтому очевидным решением является использование идентичного состояния, единственное отличие которого заключается в том, что он приводит к состоянию ожидания, но он уродлив.

Есть ли лучшие способы справиться с этим?

FSM здесь: http://i.imgur.com/m57yaMw.png (не вставлять фотографии)

ответ

0

Отвечая на мой собственный вопрос - использовать иерархическое состояние машины: http://i.imgur.com/DzBApeY.png

Супер-Standby состояние не строго необходимо.

+0

Планируете ли вы на самом деле закодировать свою иерархическую машину состояний или это просто теоретическое упражнение? –

+0

Да, используя [hsm-statechart] (http://code.google.com/p/hsm-statechart), хотя я еще не обошел его. –

Смежные вопросы