RelayController.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #ifndef RelayController_h
  2. #define RelayController_h
  3. #include <Arduino.h>
  4. class RelayController {
  5. private:
  6. // 继电器引脚定义
  7. const int _relayPin22; // GPIO22继电器
  8. const int _relayPin23; // GPIO23继电器
  9. const int _relayPin4; // GPIO4定时继电器
  10. // 状态枚举
  11. enum RelayState { HIGH_Z, ON };
  12. RelayState _relay22State;
  13. RelayState _relay23State;
  14. RelayState _relay4State;
  15. // GPIO22超时检测变量
  16. unsigned long _relay22StartTime;
  17. bool _relay22TimeoutCheck;
  18. float _gpio6TempAtRelay22On;
  19. // 新增:温度滞后控制变量
  20. bool _relay22TempHold; // 标记是否因高温开启需要滞后关闭
  21. // 定时继电器与时间管理变量
  22. const unsigned long _dailyOnHour = 8;
  23. const unsigned long _onDuration = 15 * 60 * 1000;
  24. unsigned long _relay4LastOnCycle;
  25. unsigned long _relay4OnTime;
  26. unsigned long _powerOnTime;
  27. unsigned long _simulatedUnixTime;
  28. public:
  29. // 构造函数
  30. RelayController(int pin22, int pin23, int pin4);
  31. // 初始化
  32. void begin();
  33. // 继电器控制方法
  34. void setRelay22HighZ();
  35. void turnOnRelay22(float currentGpio6Temp);
  36. void setRelay23HighZ();
  37. void turnOnRelay23();
  38. void setRelay4HighZ();
  39. void turnOnRelay4();
  40. // 主控制逻辑(增加温度滞后控制)
  41. void controlByTempConditions(float tempGpio2, float tempGpio3, float tempGpio6,
  42. float diffThreshold = 15.0, float gpio6High = 35.0,
  43. float gpio6Low = 15.0, float highTempOn = 35.0, // 开启温度
  44. float highTempOff = 25.0); // 关闭温度
  45. // 定时任务处理
  46. void handleTimedTasks(float currentGpio6Temp);
  47. // 时间管理
  48. void updateNtpTime();
  49. unsigned long getCurrentUnixTime();
  50. int getCurrentHour();
  51. unsigned long get24hCycleCount();
  52. unsigned long getPowerOnTime();
  53. // 获取状态
  54. String getRelay22State();
  55. String getRelay23State();
  56. String getRelay4State();
  57. };
  58. #endif