首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言實現電壓閾值控制開關邏輯:狀態機方法

     編輯:程式設計疑難解答

需求

  • 電壓 > 5V → 開關斷開,保持斷開直到電壓 < 3V → 閉合。
  • 電壓 < 3V → 開關閉合,保持閉合直到電壓 > 5V → 斷開。

解法:有限狀態機 (FSM)

定義兩狀態:`OPEN`(斷開)、`CLOSED`(閉合)。根據電壓與當前狀態轉移:

typedef enum { OPEN, CLOSED } SwitchState;
SwitchState state = CLOSED;  // 初始閉合

void updateSwitch(float voltage) {
    switch (state) {
        case CLOSED:
            if (voltage > 5.0f) state = OPEN;
            break;
        case OPEN:
            if (voltage < 3.0f) state = CLOSED;
            break;
    }
    // 輸出控制信號
    setRelay(state == CLOSED);
}

為何 if-else 失敗

單純 `if (v>5) open; else if (v<3) close;` 無法表達「保持當前狀態直到閾值反轉」的**滯後特性**,會在 3V-5V 區間反覆震盪。狀態機天然體現歷史相關性。

擴展

若需去抖動,可增加計數器:連續 N 次採樣滿足閾值才轉移。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved