А для чего выходы устанавливать постоянно? Один раз при наступлении
ожидаемого события в данном состоянии изменил вывод (кнопку нажали
- зажёг светодиод) и перешёл в другое состояние. В другом состоянии
ожидаешь другое событие. Все функции неблокирующие. С 2005 года использую такую технику во многих проектах. Разумеется всё сложнее в реальности, но примеры передают основной посыл.