70 lines
2.1 KiB
C++
70 lines
2.1 KiB
C++
#ifndef __HISTORY_H
|
|
#define __HISTORY_H
|
|
|
|
#include "HermitCrab.h" // Assuming CURRENT_STATUS structure is defined elsewhere
|
|
|
|
#define RING_SIZE (256 * 7)
|
|
//#define RING_MASK (RING_SIZE - 1)
|
|
|
|
class CHistory {
|
|
private:
|
|
int16_t head;
|
|
int16_t tail;
|
|
int16_t count;
|
|
STATUS_TYPE ring[RING_SIZE]; // Ring buffer
|
|
|
|
float Kp_Humidity;
|
|
float Kd_Humidity;
|
|
float LR_Humidity;
|
|
|
|
float Kp_Temp1;
|
|
float Kd_Temp1;
|
|
float LR_Temp1;
|
|
|
|
float Kp_Temp2;
|
|
float Kd_Temp2;
|
|
float LR_Temp2;
|
|
|
|
float Kp_Temp3;
|
|
float Kd_Temp3;
|
|
float LR_Temp3;
|
|
|
|
int16_t lastTemp, lastHumid;
|
|
|
|
public:
|
|
CHistory();
|
|
|
|
void loadPID();
|
|
void savePID();
|
|
void init(int16_t lastTemp, int16_t lastHumid);
|
|
|
|
inline float getKpTemperature() { return Kp_Temp1;}
|
|
inline float getKdTemperature() { return Kd_Temp1;}
|
|
inline float getLRTemperature() { return LR_Temp1;}
|
|
inline float getKpHumidity() { return Kp_Humidity;}
|
|
inline float getKdHumidity() { return Kd_Humidity;}
|
|
inline float getLRHumidity() { return LR_Humidity;}
|
|
inline float getKpHeater1() { return Kp_Temp1; }
|
|
inline float getKdHeater1() { return Kd_Temp1; }
|
|
inline float getKpMist() { return Kp_Humidity; }
|
|
inline float getKdMist() { return Kd_Humidity; }
|
|
|
|
int16_t add(STATUS_TYPE &status);
|
|
int16_t calculateDutyForTemp1(int16_t setPoint, int16_t curTemp, int16_t lastDuty);
|
|
int16_t calculateDutyForTemp2(int16_t setPoint, int16_t curTemp, int16_t lastDuty);
|
|
int16_t calculateMistDuty(uint16_t setPpoint, uint16_t curHumid, int16_t lastDuty);
|
|
inline int16_t getRingCount() { return count; };
|
|
inline int16_t getRingSize() { return RING_SIZE; }
|
|
inline uint8_t *getRingData1() { return (uint8_t *) &ring[tail]; }
|
|
inline uint8_t *getRingData2() { return (uint8_t *) &ring[0]; }
|
|
inline int16_t getRingHead() { return head; }
|
|
inline int16_t getRingTail() { return tail; }
|
|
|
|
private:
|
|
void adjustGainsUsingGradientDescent(float &Kp, float &Kd, float currentError, uint16_t setpoint, float prevTemperature, float MAX_EXPECTED_ERROR);
|
|
};
|
|
|
|
extern CHistory history;
|
|
#endif // CHISTORY_H
|
|
|