huyongji1.1-system/App/Irrigation/Irrigation.h

139 lines
5.0 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __IRRIGATION_H
#define __IRRIGATION_H
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stdint.h"
#include "stdio.h"
#include "tim.h" // 添加定时器头文件
#include "Save_Time.h"
#include "EEPROM.h"
#include "Inf_4G.h"
/* 类型定义 -----------------------------------------------------------------*/
// 工作模式枚举
// 系统状态枚举
typedef enum {
SYS_STATE_STOP = 0, // 系统停止
SYS_STATE_RUNNING // 系统运行
} SystemState;
// 风机状态枚举
typedef enum {
FAN_1 = 0, // 风机1
FAN_2 // 风机2
} FanState;
/* 外部变量声明 -------------------------------------------------------------*/
// 直排模式时间参数
extern uint32_t DIRECT_HIGH_PUMP_ON_TIME; // 高水位水泵开启时间
extern uint32_t DIRECT_HIGH_PUMP_OFF_TIME; // 高水位水泵关闭时间
extern uint32_t DIRECT_HIGH_FAN_ON_TIME; // 高水位风机开启时间
extern uint32_t DIRECT_HIGH_FAN_OFF_TIME; // 高水位风机关闭时间
extern uint32_t DIRECT_LOW_FAN_ON_TIME; // 低水位风机开启时间
extern uint32_t DIRECT_LOW_FAN_OFF_TIME; // 低水位风机关闭时间
extern uint32_t DIRECT_FIRST_LOW_FAN_ON; // 首次低水位风机开启时间
extern uint32_t DIRECT_FIRST_LOW_FAN_OFF; // 首次低水位风机关闭时间
// 冲厕模式时间参数
extern uint32_t FLUSH_HIGH_PUMP_ON_TIME; // 1分钟
extern uint32_t FLUSH_HIGH_PUMP_OFF_TIME; // 150分钟
extern uint32_t FLUSH_HIGH_FAN_ON_TIME; // 40分钟
extern uint32_t FLUSH_HIGH_FAN_OFF_TIME; // 2分钟
extern uint32_t FLUSH_LOW_FAN_ON_TIME; // 5分钟
extern uint32_t FLUSH_LOW_FAN_OFF_TIME; // 25分钟
extern uint32_t FLUSH_FIRST_LOW_FAN_ON; // 40分钟
extern uint32_t FLUSH_FIRST_LOW_FAN_OFF; // 2分钟
//灌溉模式时间参数
extern uint32_t HIGH_LEVEL_PUMP_ON_TIME; // 1分钟
extern uint32_t HIGH_LEVEL_PUMP_OFF_TIME; // 120分钟
extern uint32_t HIGH_LEVEL_FAN_ON_TIME; // 20分钟
extern uint32_t HIGH_LEVEL_FAN_OFF_TIME; // 5分钟
extern uint32_t FIRST_LOW_FAN_ON_TIME; // 10分钟
extern uint32_t FIRST_LOW_FAN_OFF_TIME; // 10分钟
extern uint32_t LOW_LEVEL_FAN_ON_TIME; // 5分钟
extern uint32_t LOW_LEVEL_FAN_OFF_TIME; // 40分钟
extern uint32_t debug_pump_state; // 用于调试的状态变量
// 特殊模式时间参数
// 特殊模式变量
extern uint32_t SPECIAL_INITIAL_STOP_TIME; // 24小时 = 1440分钟 前5分钟
extern uint32_t SPECIAL_FIRST_PHASE_TIME; // 48小时 = 2880分钟 后六分钟
extern uint32_t SPECIAL_PUMP_RUN_TIME; // 前1分钟运行
extern uint32_t SPECIAL_FIRST_STOP_TIME; // 前359分钟停止
extern uint32_t SPECIAL_SECOND_PHASE_TIME; // 48小时 = 2880分钟
extern uint32_t SPECIAL_SECOND_STOP_TIME; // 239分钟停止
// 计时器变量
extern uint32_t pump_timer; // 水泵计时器
extern uint32_t fan_timer; // 风机计时器
extern uint32_t first_low_timer; // 首次低液位计时器
// 参数修改标志
extern uint8_t parameters_changed;
// 强制控制标志
extern uint8_t force_pump_off; // 强制关闭水泵
extern uint8_t force_fan_off; // 强制关闭风机
extern uint8_t is_first_low;
extern volatile uint8_t time_just_modified;
//模式参数
// 当前工作模式
typedef enum {
MODE_NONE = 0, // 无模式/未初始化
MODE_FLUSH = 1, // 直排模式
MODE_IRRIGATION = 2, // 灌溉模式
MODE_DIRECT = 3, // 冲厕模式
MODE_SPECIAL = 4 // 特殊模式/培菌模式
} WorkMode;
extern WorkMode current_mode; // 当前工作模式
//特殊阶段时间参数
extern uint32_t special_phase_timer ; // 阶段计时器
extern uint32_t special_cycle_timer; // 循环计时器
/* 函数声明 ----------------------------------------------------------------*/
// 设备控制函数(这些函数需要在其他地方实现)
void Control_WaterPump(uint8_t state);
void Control_Fan1(uint8_t state);
void Control_Fan2(uint8_t state);
uint8_t Read_FloatBall(void);
// 应用层函数
void Device_Init(void); // 设备初始化
uint8_t Read_FloatBall_Stable(void); // 读取浮球状态(带防抖)
void Direct_Mode_Control(void); // 直排模式控制
void Irrigation_Mode_Control(void); // 灌溉模式控制
void Flush_Mode_Control(void); // 冲洗模式控制
void Special_Mode_Control(void); // 特殊模式控制
//特殊模式
typedef enum {
SPECIAL_INITIAL_STOP = 0, // 初始阶段24小时停止
SPECIAL_FIRST_PHASE = 1, // 第一阶段48小时6小时循环
SPECIAL_SECOND_PHASE = 2, // 第二阶段48小时4小时循环
SPECIAL_TO_DIRECT = 3 // 特殊模式结束,切换到直排模式
} SpecialPhase_t;
extern SpecialPhase_t special_phase;
void Switch_To_Special_Mode(void); // 切换到特殊模式
void Switch_Mode(WorkMode new_mode);
void Restart_Current_Mode(void);
extern volatile uint8_t timer_pause; // 计时器暂停标志
#endif /* __APP_WORK_H */