next input代碼嘗試編寫

使用有限狀態機(FSM)可以使代碼結構更清晰,特別是處理復雜的狀態和過渡時。以下是如何根據你提供的步驟,用有限狀態機來實現自動校準和中斷觸發邏輯的示例代碼。

狀態定義

  1. IDLE: 空閑狀態,等待數據輸入。
  2. CALIBRATING: 進行基準值更新。
  3. ACT_THRESHOLD_EXCEEDED: 超過自校準閾值,暫停基準值更新。
  4. PERMANENT_STRESS: 檢測到永久/半永久性應力改變。
  5. INTERRUPT_TRIGGERED: 中斷已觸發狀態。

狀態轉移條件

這段代碼展示了如何使用有限狀態機來管理傳感器的自動校準和中斷觸發邏輯。你可以根據實際需求對具體邏輯進行調整和擴展。

  1. IDLE -> CALIBRATING: 啟動自動校準。
  2. CALIBRATING -> ACT_THRESHOLD_EXCEEDED: 讀值超過自校準閾值。
  3. ACT_THRESHOLD_EXCEEDED -> PERMANENT_STRESS: 超過自校準閾值且時間超過設定值。
  4. PERMANENT_STRESS -> CALIBRATING: 基準值更新。
  5. ANY -> INTERRUPT_TRIGGERED: 讀值超過中斷觸發閾值并超過預設采樣數。
  6. INTERRUPT_TRIGGERED -> IDLE: 讀值恢復正常。
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    #include <time.h>#define CAL_PERIOD 4    // 基準值更新周期 (秒)
    #define CAL_RESET 10    // 基準值停止更新時間 (秒)
    #define ACT_THRESHOLD 5 // 自校準閾值
    #define LIFT_DELAY 2    // 延遲時間 (秒)
    #define SAMPLE_THRESHOLD 3 // 觸發中斷的預設采樣數typedef enum {IDLE,CALIBRATING,ACT_THRESHOLD_EXCEEDED,PERMANENT_STRESS,INTERRUPT_TRIGGERED
    } State;typedef struct {int value;          // 傳感器當前值int baseline;       // 基準值int act;            // 自動校準閾值int interrupt_threshold; // 中斷觸發閾值time_t last_update; // 上次基準值更新的時間State state;        // 當前狀態int consecutive_samples; // 連續超過閾值的樣本計數
    } Sensor;void update_baseline(Sensor *sensor) {// 更新基準值的邏輯sensor->baseline = sensor->value; // 簡單示例,實際可能需要更復雜的邏輯sensor->last_update = time(NULL);sensor->act = sensor->baseline + ACT_THRESHOLD;sensor->interrupt_threshold = sensor->baseline + ACT_THRESHOLD * 2;
    }void fsm_update(Sensor *sensor) {time_t current_time = time(NULL);switch (sensor->state) {case IDLE:if (sensor->value < sensor->act) {sensor->state = CALIBRATING;update_baseline(sensor);}break;case CALIBRATING:if (sensor->value > sensor->act) {sensor->state = ACT_THRESHOLD_EXCEEDED;sensor->last_update = current_time;} else if (current_time - sensor->last_update > CAL_PERIOD) {update_baseline(sensor);}break;case ACT_THRESHOLD_EXCEEDED:if (sensor->value <= sensor->act) {sensor->state = CALIBRATING;} else if (current_time - sensor->last_update > CAL_RESET) {sensor->state = PERMANENT_STRESS;}break;case PERMANENT_STRESS:update_baseline(sensor);sensor->state = CALIBRATING;break;case INTERRUPT_TRIGGERED:if (sensor->value < sensor->interrupt_threshold) {sensor->state = IDLE;}break;}if (sensor->value > sensor->interrupt_threshold) {sensor->consecutive_samples++;if (sensor->consecutive_samples >= SAMPLE_THRESHOLD) {sensor->state = INTERRUPT_TRIGGERED;}} else {sensor->consecutive_samples = 0;}
    }int main() {Sensor sensor = {0};sensor.baseline = 0;sensor.act = ACT_THRESHOLD;sensor.interrupt_threshold = ACT_THRESHOLD * 2;sensor.state = IDLE;sensor.last_update = time(NULL);// 模擬數據輸入int values[] = {1, 2, 3, 6, 8, 9, 3, 4, 5};int num_values = sizeof(values) / sizeof(values[0]);for (int i = 0; i < num_values; i++) {sensor.value = values[i];fsm_update(&sensor);printf("Value: %d, State: %d\n", sensor.value, sensor.state);}return 0;
    }
    

    代碼說明

  7. State:定義不同狀態。
  8. Sensor:包含傳感器當前值、基準值、自動校準閾值、中斷閾值、上次更新基準值時間、當前狀態和連續超過閾值的樣本計數。
  9. update_baseline:更新基準值并調整閾值。
  10. fsm_update:根據當前狀態和傳感器值更新狀態。
  11. main:模擬數據輸入,更新傳感器狀態并輸出結果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/44951.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44951.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/44951.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python高級(三)_正則表達式

Python高級-正則表達式 第三章 正則表達式 在開發中會有大量的字符串處理工作,其中經常會涉及到字符串格式的校驗。 1、正則表達式概述 正則表達式,又稱正規表示式、正規表示法、正規表達式、規則表達式、常規表示法(英語:Regular Expression,在代碼中常簡寫為regex、…

PostgreSql中的JSON數據類型

PostgreSQL 提供了兩種 JSON 數據類型&#xff1a;JSON 以及 JSONB。這兩種類型主要的區別在于數據存儲格式&#xff0c;JSONB 使用二進制格式存儲數據&#xff0c;更易于處理。 PostgreSQL 推薦優先選擇 JSONB 數據類型。 兩種數據類型之間的區別&#xff1a; 功能JSONJSONB存…

網絡建設與運維23國賽網絡運維正式賽題解析

競賽環境請看主頁&#xff01; 23國賽網絡運維 任務描述&#xff1a;某集團公司在更新設備后&#xff0c;路由之間無法正常通信&#xff0c;請修 復網絡達到正常通信。 &#xff08;1&#xff09; 請在server1“管理員”下拉菜單中選擇“鏡像”選項卡&#xff0c;點 擊 “創…

超聲波眼鏡清洗機有用嗎?四大主流超聲波清洗機品牌整理測評

長期佩戴的眼鏡&#xff0c;若不定期清洗&#xff0c;不僅鏡片會逐漸積聚油脂、灰塵&#xff0c;影響透光率&#xff0c;使視物模糊&#xff0c;更嚴重的是&#xff0c;眼鏡上日益增加的微小雜質和細菌可能會逐漸影響到眼睛健康&#xff0c;導致視力下降、眼部疾病等問題。 這…

Go 1.19.4 函數-Day 08

1. 函數概念和調用原理 1.1 基本介紹 函數是基本的代碼塊&#xff0c;用于執行一個任務。 Go 語言最少有個 main() 函數。 你可以通過函數來劃分不同功能&#xff0c;邏輯上每個函數執行的是指定的任務。 函數聲明告訴了編譯器函數的名稱&#xff0c;返回類型&#xff0c;和參…

STM32 - PWR 筆記

PWR&#xff08;Power Control&#xff09;電源控制 PWR 負責管理 STM32 內部的電源供電部分&#xff0c;可以實現 可編程電壓監測器 和 低功耗模式 的功能 可編程電壓監測器&#xff08;PVD&#xff09;可以監控VDD電源電壓&#xff0c;當VDD下降到PVD閥值以下或上升到PVD…

usbserver工程師手記(三)手工開通 OTP功能

1、設定密鑰&#xff0c;用戶自行選擇一個密鑰&#xff0c;以下以密鑰為 EAZAYOKNGETBOPC5 為例說明 2、usb server 配置otp 密鑰&#xff0c;目前還沒有UI 界面開通&#xff0c;后續版本會支持從管理界面開通 curl -X POST -H Content-Type: application/json -H Accept: app…

關于transformers庫驗證時不進入compute_metrics方法的一些坑

生成式任務輸入就是標簽 transformers在進入compute_metrics前會有一個判斷&#xff0c;源碼如下&#xff1a; # 版本 transformers4.41.2 # 在trainer.py 的 3842 行 # Metrics! if (self.compute_metrics is not Noneand all_preds is not Noneand all_labels is not Nonea…

Centos7下zabbix安裝與部署

Centos7下zabbix安裝與部署 一、Zabbix介紹 1、zabbix是一個基于WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案 2、zabbix能監視各種網絡參數&#xff0c;保證服務器系統的安全運營&#xff1b;并提供靈活的通知機制以讓系統管理員快速定位/解決存在的各…

活動策劃秘籍:如何讓企業活動引爆市場?

作為一個活動策劃&#xff0c;我的經驗是&#xff0c;活動策劃是一場精心編排的交響樂&#xff0c;每一個音符都要恰到好處。 想要做好企業活動策劃工作的關鍵在于綜合考慮多個方面&#xff0c;并確保每個環節的順暢執行。 以下是7個關鍵要素&#xff0c;只要用心體會&#x…

學習小記-使用Redis的令牌桶算法實現分布式限流

在介紹令牌桶算法前先介紹一下漏桶算法&#xff08;Leaky Bucket&#xff09; 漏桶算法&#xff08;Leaky Bucket&#xff09; 漏桶算法是一種固定容量的容器模型&#xff0c;它通過控制數據流入和流出的速度來限制數據的傳輸速率。漏桶算法的主要特點包括&#xff1a; 固定…

鴻蒙開發:Universal Keystore Kit(密鑰管理服務)【密鑰派生(C/C++)】

密鑰派生(C/C) 以HKDF256密鑰為例&#xff0c;完成密鑰派生。具體的場景介紹及支持的算法規格&#xff0c;請參考[密鑰生成支持的算法]。 在CMake腳本中鏈接相關動態庫 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)開發步驟 生成密鑰 指定密鑰別名。 初始化密鑰屬…

通過電壓差判定無源晶振是否起振正確嗎?

在電子工程中&#xff0c;無源晶振作為許多數字電路的基礎組件&#xff0c;其是否成功起振對于系統的正常運行至關重要。然而&#xff0c;通過簡單檢測晶振兩端的電壓差來判斷晶振是否工作&#xff0c;這一方法存在一定的誤區&#xff0c;晶發電子將深入探討這一話題&#xff0…

2008年下半年軟件設計師【下午題】真題及答案

文章目錄 2008年下半年軟件設計師下午題--真題2008年下半年軟件設計師下午題--答案 2008年下半年軟件設計師下午題–真題 2008年下半年軟件設計師下午題–答案

四川赤橙宏海商務信息咨詢有限公司抖音電商服務靠譜嗎?

在數字化浪潮席卷全球的今天&#xff0c;電商行業蓬勃發展&#xff0c;各種新興電商平臺層出不窮。其中&#xff0c;抖音電商以其獨特的社交屬性和龐大的用戶基礎&#xff0c;迅速崛起為行業新星。四川赤橙宏海商務信息咨詢有限公司&#xff0c;作為專注于抖音電商服務的佼佼者…

個人怎么交易現貨黃金:加速形態

我們作為普通個人&#xff0c;在現貨黃金市場中交易就需要掌握相應的現貨黃金投資技巧。下面我們就來介紹一個&#xff0c;個人怎么交易現貨黃金的形態——加速形態。 加速形態是用于判斷市場趨勢力竭的情況&#xff0c;這種趨勢可以是上升&#xff0c;也可以是下跌。但是要注意…

用Qwt進行圖表和數據可視化開發

目錄 Qwt介紹 示例應用場景 典型QWT開發流程 舉一些Qwt的例子&#xff0c;多繪制幾種類型的圖像 1. 繪制折線圖 (Line Plot) 2. 繪制散點圖 (Scatter Plot) 3. 繪制柱狀圖 (Bar Plot) 4. 繪制直方圖 (Histogram) Qwt介紹 QWT開發主要涉及使用QWT庫進行圖表和數據可視化…

晉升業內新寵兒,MoE模型給了AI行業兩條關鍵出路

文 | 智能相對論 作者 | 陳泊丞 今年以來&#xff0c;MoE模型成了AI行業的新寵兒。 一方面&#xff0c;越來越多的廠商在自家的閉源模型上采用了MoE架構。在海外&#xff0c;OpenAI的GPT-4、谷歌的Gemini、Mistral AI的Mistral、xAI的Grok-1等主流大模型都采用了MoE架構。 …

第三方配件也能適配蘋果了,iOS 18與iPadOS 18將支持快速配對

蘋果公司以其對用戶體驗的不懈追求和對創新技術的不斷探索而聞名。隨著iOS 18和iPadOS 18的發布&#xff0c;蘋果再次證明了其在移動操作系統領域的領先地位。 最新系統版本中的一項引人注目的功能&#xff0c;便是對藍牙和Wi-Fi配件的配對方式進行了重大改進&#xff0c;不僅…

python如何計算兩個時間相差多少秒鐘,分鐘,小時,天,月,年

使用場景&#xff1a;在做上課記錄系統的時候&#xff0c;有上課開始時間和上課結束時間&#xff0c;需要計算這兩個時間的插值&#xff0c;以分鐘為單位。 封裝方法如下&#xff1a; from datetime import datetimedef sub_seconds(date1: str "2024-07-11 12:33:33&q…