×

Tạo FSM Đơn Giản Trong C Để Kiểm Soát Trạng Thái Cửa

Máy trạng thái hữu hạn (Finite State Machine - FSM) là một mô hình toán học dùng để thiết kế logic của một hệ thống trong nhiều lĩnh vực như điện tử, lập trình máy tính, lý thuyết ngôn ngữ lập trình, và nhiều lĩnh vực khác. FSM có thể được định nghĩa bởi một danh sách các trạng thái, trạng thái bắt đầu, điều kiện chuyển trạng thái, và các hành động thực hiện trong từng trạng thái.

Dưới đây là ví dụ cách tạo một FSM đơn giản trong C để mô tả trạng thái của một cửa. Cửa có thể ở một trong hai trạng thái: "Mở" hoặc "Đóng". Sự kiện "nhấn nút" sẽ thay đổi trạng thái của cửa từ "Mở" sang "Đóng" và ngược lại.

Định nghĩa các Trạng thái và Sự kiện

#include <stdio.h>

// Định nghĩa các trạng thái
typedef enum {
    DOOR_CLOSED,
    DOOR_OPENED
} DoorState;

// Định nghĩa các sự kiện
typedef enum {
    BUTTON_PRESSED,
    BUTTON_RELEASED
} DoorEvent;

Tạo FSM

void handleEvent(DoorState* currentState, DoorEvent event) {
    switch (*currentState) {
        case DOOR_CLOSED:
            if (event == BUTTON_PRESSED) {
                *currentState = DOOR_OPENED;
                printf("Door opened\n");
            }
            break;
        case DOOR_OPENED:
            if (event == BUTTON_PRESSED) {
                *currentState = DOOR_CLOSED;
                printf("Door closed\n");
            }
            break;
    }
}

Sử dụng FSM

int main() {
    DoorState currentState = DOOR_CLOSED; // Trạng thái bắt đầu

    // Mô phỏng sự kiện: Nhấn nút
    handleEvent(&currentState, BUTTON_PRESSED);
    // Mô phỏng sự kiện: Nhấn nút lại
    handleEvent(&currentState, BUTTON_PRESSED);

    return 0;
}

Trong ví dụ này, FSM được thiết kế để xử lý các sự kiện liên quan đến việc mở và đóng cửa. Hàm handleEvent nhận trạng thái hiện tại và một sự kiện, sau đó cập nhật trạng thái dựa trên sự kiện đó. Trong main, chúng ta mô phỏng việc nhấn nút bằng cách gọi handleEvent với sự kiện BUTTON_PRESSED.

FSM này rất cơ bản và có thể được mở rộng để xử lý nhiều trạng thái và sự kiện hơn, cũng như thêm các hành động cụ thể cho mỗi trạng thái hoặc sự kiện.

Comments