projet3_temperature/lib/MeasureUnit/MeasureUnit.h
2020-01-29 20:04:30 +01:00

58 lines
1.9 KiB
C++

#ifndef MEASUREUNIT_H
#define MEASUREUNIT_H
#include "Ads1115.h"
#include "ThermistorSetting.h"
//#define DEBUG_TEMP
class MeasureUnit
{
public:
enum ERROR {OK = 0, MALLOC_ERR = 1};
MeasureUnit(uint8_t *analogInput, uint16_t thermistorCount, uint64_t precResistor, ThermistorSetting thermistorSetting, Adc &adc);
~MeasureUnit();
void init();
void run();
void startOffsetComputing();
void setOffsetIteration(uint8_t iteration);
void setGlobalTempOffset(double offset);
void levelTemperaturesOff();
double getGlobalTempOffset();
double *getTemperatures();
double *getROffsetMap();
//Async methods
enum STATE {IDLING, MEASURING, COMPUTING, MEASUREMENT_READY};
boolean startTemperatureMeasurement();
boolean isMeasurementReady();
double *getAsyncTemperatures();
void levelAsyncTemperaturesOff();
//End of assync methods
ERROR getError(){return _error;}
protected:
private:
double computeTemperature(double beta, double resistance, double rAt25);
double _globalOffset; //Correspond à l'offset global nécessaire afin d'avoir une température qui corresponde à la réalité
double *_temperatures; //Tableau contenant toutes les températures
double *_rOffsetMap,*_rOffsetBuffer; //Tableau qui contient les offsets individuels pour chaque thermistance
double *_resistanceMap; //Tableau qui contient les resistances associées aux thermistances (pour debug seulement)
uint8_t *_analogInput; //Pointeur qui garde l'adresse du tableau contenant le nom des entrées analogiques
uint16_t _thermistorCount;
uint64_t _precResistor;
ERROR _error;
Adc &_adc;
ThermistorSetting _thermistorSetting;
//Async part
STATE _state;
uint8_t _channel, _offsetComputeIte,_offsetCounter;
double _courant, _tension;
boolean _triggerLevelOff; //Attribut permettant de savoir si un étalonnage a été demandé
};
#endif //MEASUREUNIT_H