93 lines
2.9 KiB
C++
93 lines
2.9 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 "../faults/faults.h"
|
|
#include "../macros.h"
|
|
#include "../types.h"
|
|
|
|
#define _TEMP_CONVERSION_DELAY 800
|
|
#define _ANALOG_READ_DELAY 500
|
|
// 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)
|
|
#if _MODBUS_AVERAGE_TEMPERATURES == 1
|
|
// 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
|
|
#endif
|
|
|
|
extern u16 modbusData[];
|
|
extern Display display;
|
|
|
|
class Controller
|
|
{
|
|
private:
|
|
const uint8_t _aPin;
|
|
uint8_t _prPin;
|
|
uint8_t _pfPin;
|
|
uint8_t _t1Pin;
|
|
uint8_t _t2Pin;
|
|
|
|
#if _MODBUS_AVERAGE_TEMPERATURES == 1
|
|
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
|
|
#endif
|
|
int16_t _p_arr[_P_ARR_LEN]; // Array, aus dem der Durchschnittswert ermittelt wird
|
|
u16 _p_i_curr = 0; // Aktueller Index des _p_arr-Arrays
|
|
u16 _p_i_mb_start = 0;
|
|
u16 _p_i_fault_start = 0;
|
|
bool _p_mb_full = false; // ob das _p_arr-Array für Modbus komplett gelesen werden soll
|
|
|
|
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;
|
|
u16 _rawP;
|
|
|
|
// u32 _lastT1Idle;
|
|
// u32 _lastT2Idle;
|
|
// u32 _lastPIdle;
|
|
// u32 _lastFaultCheck;
|
|
// u32 _lastT2checked;
|
|
// u32 _lastPchecked;
|
|
|
|
void _setT1Valve(uint8_t, States);
|
|
void _setPValves(States);
|
|
|
|
#if _MODBUS_AVERAGE_TEMPERATURES == 1
|
|
void _averageTemperature1();
|
|
void _averageTemperature2();
|
|
#endif // _MODBUS_AVERAGE_TEMPERATURES == 1
|
|
inline void _averagePressure();
|
|
inline int16_t _buildAveragePForFaultDetection();
|
|
|
|
public:
|
|
Controller(const uint8_t pAnalaogPin,
|
|
const uint8_t oneWirePin,
|
|
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
|