Sensor代码框架
#include <stdio.h>
// 定义一个枚举类型来表示光电开关的状态
typedef enum {
SWITCH_OPEN,
SWITCH_CLOSED
} SwitchState;
// 定义一个结构体来记录光电开关传感器的状态
typedef struct {
SwitchState currentState; // 当前状态
SwitchState lastState; // 上次获取的状态
unsigned int stateChangeTime; // 获取状态的时间(例如,可以使用滴答定时器的计数值)
} SwitchSensor;
// 函数声明
SwitchState readSwitchState(); // 假设这是一个读取当前开关状态的函数
void delayMs(unsigned int ms); // 延时函数
int main(void) {
// 初始化传感器状态结构体
SwitchSensor sensor = {SWITCH_OPEN, SWITCH_OPEN, 0};
SwitchState stableState = SWITCH_OPEN; // 初始化稳定状态
int stableCount = 0; // 用于计数连续相同的读数
// 主循环
while(1) {
// 读取当前状态
sensor.currentState = readSwitchState();
// 如果状态改变,重置稳定计数器,并记录时间
if (sensor.currentState != sensor.lastState) {
stableCount = 0;
sensor.stateChangeTime = // 获取当前时间,例如使用HAL_GetTick();
} else {
// 如果状态未改变,增加稳定计数器
stableCount++;
// 如果连续3次读数相同,我们认为它已经稳定
if (stableCount >= 3) {
stableState = sensor.currentState;
printf("Switch is stable: %s\n", stableState == SWITCH_OPEN ? "Open" : "Closed");
// 这里可以执行进一步的操作,例如设置标志位等
// 重置稳定计数器以继续监控状态变化
stableCount = 0;
}
}
// 更新上次状态
sensor.lastState = sensor.currentState;
// 延时,以便不会过快地读取状态
delayMs(100);
}
}
// 假设的读取状态函数,需要根据实际硬件连接进行实现
SwitchState readSwitchState() {
// 这里应该有读取传感器状态的代码
// 比如读取GPIO的输入状态
// 返回 SWITCH_OPEN 或 SWITCH_CLOSED
}
// 延时函数,需要根据系统时钟进行适配
void delayMs(unsigned int ms) {
// 使用HAL库或者直接操作SysTick定时器来实现延时
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2022-05-02 IWDG独立看门狗