Прежде всего, извините меня, если это не тот сайт, где можно разместить этот вопрос, но я не знал, где его задать.
Мне нужно реализовать FSM для представления счетчика людей в комнате, есть две возможности: люди могут войти в комнату или выйти из комнаты. В начале гарантирована пустая комната, и только один человек может пройти через дверь одновременно.
Чтобы знать, входит человек или выходит, есть 2 датчика A и B, которые в зависимости от порядка активации показывают, входит человек или выходит. A, затем B означает, что человек входит в комнату, B, затем A указывает, что человек выходит из комнаты.
Теперь мне нужно реализовать это на arduino и сделать диаграмму FSM, но у меня проблемы с диаграммой, хотя я думаю, что уже правильно понял программу C (не проверял ее)
Итак, вот часть моей программы на C/Arduino
int currentPeople = 0;
PeopleState currentState = None;
enum PeopleState {
A,
B,
None
};
Теперь это две функции, которые вызываются для соответствующих датчиков.
//Gets called every time sensor A is activated
void countPeopleA(){
if (currentState == None){
currentState = A;
} else if (currentState == B){
if(currentPeople > 0){
currentPeople--;
}
currentState = None;
}
}
//Gets called every time sensor B is activated
void countPeopleB(){
if (currentState == None){
currentState = B;
} else if (currentState == A){
currentPeople++;
currentState = None;
}
}
Мои опасения таковы:
- Являются ли состояния, которые я определил, правильными для проблемы? Я имею в виду, правильно ли определять состояние всякий раз, когда датчик активируется, или состояния должны быть «Вход» и «Выход»?
- Как я могу изобразить состояния? Я только изучаю FSM, поэтому у меня проблемы с пониманием, например, как вы можете гарантировать, что если комната пуста, человек не уйдет? Я могу проверить это условие в коде, но я не знаю, как его представить.