DreherTankController/src/controller/controller.h

87 lines
2.7 KiB
C++

#ifndef MY_CONTROLLER_H_INCLUDED
#define MY_CONTROLLER_H_INCLUDED
#include "../OneWire/OneWire.h"
#include "../DallasTemperature/DallasTemperature.h"
#include "../display/display.h"
#include "../common.h"
#define _TEMP_CONVERSION_DELAY 800
#define _ANALOG_READ_DELAY 500
// Maximal nötige Anzahl an Temperatur-Einträgen, bevor der interne 12 Bit Timer überläuft
#define _T_ARR_LEN (409600 / _TEMP_CONVERSION_DELAY) + 1
// Maximal nötige Anzahl an Druck-Einträgen, bevor der interne 12 Bit Timer überläuft
#define _P_ARR_LEN (409600 / _ANALOG_READ_DELAY) + 1
// #define _T_ARR_LEN 255
// #define _P_ARR_LEN 255
class Controller
{
private:
const uint8_t _aPin;
parameters *_params;
values *_vals;
Display *_display;
PSensor *_pSensor;
valveStates *_vStates;
uint8_t _prPin;
uint8_t _pfPin;
uint8_t _t1Pin;
uint8_t _t2Pin;
int16_t _t1_arr[_T_ARR_LEN]; // Array, aus dem der Durchschnittswert ermittelt wird
u16 _t1_c = 0; // Anzahl der Einträge, aus denen der Durchschnitt gebildet wird
bool _t1_of = false; // Flag, die anzeigt, ob das _t1_arr-Array schon voll ist
// int16_t _t2_arr[_T_ARR_LEN]; // Array, aus dem der Durchschnittswert ermittelt wird
u16 _t2_c = 0; // Anzahl der Einträge, aus denen der Durchschnitt gebildet wird
bool _t2_of = false; // Flag, die anzeigt, ob das _t2_arr-Array schon voll ist
int16_t _p_arr[_P_ARR_LEN]; // Array, aus dem der Durchschnittswert ermittelt wird
u16 _p_c = 0; // Anzahl der Einträge, aus denen der Durchschnitt gebildet wird
bool _p_of = false; // Flag, die anzeigt, ob das _p_arr-Array schon voll ist
OneWire _oneWire;
DallasTemperature _dallas;
DeviceAddress _tempAddr1;
enum States : uint8_t { stateIdle, stateRising, stateFalling };
States _tState = stateIdle;
States _pState = stateIdle;
bool _initOk = false;
bool _requestConversion;
unsigned long _lastConversion;
unsigned long _lastAnalogRead;
uint16_t _rawP;
void _setT1Valve(uint8_t, States);
void _setPValves(States);
#if _MODBUS == 1
void _averageTemperature1();
void _averageTemperature2();
void _averagePressure();
#endif
public:
Controller(const uint8_t pAnalaogPin,
const uint8_t oneWirePin,
parameters *p,
values *vals,
Display *d,
PSensor *s,
valveStates *vStates,
const uint8_t pRisePin,
const uint8_t t1Pin,
const uint8_t t2Pin,
const uint8_t pFallPin
);
void init(bool startup=false);
void process();
#if _MODBUS == 1
void resetAverageCounters();
#endif
};
#endif // MY_CONTROLLER_H_INCLUDED