实现一个简单的有限状态机FSM 用于控制设备的不同工作模式 例如待机 工作 睡眠等 请包含状态转换逻辑
时间: 2024-09-21 15:05:26 浏览: 88
fsm_keil_version3_keil有限状态机_fsm打开_8051实现状态机_
要实现一个简单的有限状态机(Finite State Machine, FSM),我们首先需要定义一些基本的概念:状态、转移条件以及对应的行为。在这个例子中,我们将创建一个状态机来管理设备的工作模式,包括待机、工作和睡眠三种状态。
```c++
enum class DeviceState { STANDBY, WORKING, SLEEPING };
class DeviceController {
public:
explicit DeviceController(DeviceState initialState) : currentState(initialState) {}
void updateState(int input) {
switch (currentState) {
case DeviceState::STANDBY:
if (input == 1) { // 用户按下启动键
currentState = DeviceState::WORKING;
}
break;
case DeviceState::WORKING:
if (input == 2) { // 用户按下休眠键
currentState = DeviceState::SLEEPING;
} else if (input == 0) { // 工作一定时间后自动进入待机
currentState = DeviceState::STANDBY;
}
break;
case DeviceState::SLEEPING:
if (input == 1) { // 用户唤醒设备
currentState = DeviceState::WORKING;
}
break;
default:
// 对于未知或非法状态,可以添加错误处理逻辑
break;
}
// 执行相应状态的行为
switch (currentState) {
case DeviceState::STANDBY:
std::cout << "Device is in Standby mode." << std::endl;
break;
case DeviceState::WORKING:
std::cout << "Device is Working." << std::endl;
// 这里可以添加实际工作的代码
break;
case DeviceState::SLEEPING:
std::cout << "Device is Sleeping." << std::endl;
// 这里可以添加进入休眠的代码
break;
}
}
private:
DeviceState currentState;
};
int main() {
DeviceController device(DeviceState::STANDBY);
// 用户输入,比如按键事件
for (int i = 0; i < 5; ++i) {
int input = i % 3; // 模拟用户按动1(开始)、2(休眠)或0(无操作)
device.updateState(input);
std::this_thread::sleep_for(std::chrono::seconds(1)); // 模拟设备响应速度
}
return 0;
}
```
阅读全文