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.mzph.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…