projet3_temperature/lib/MeasureUnit_ESP8266_LTC2439/MeasureUnit.h
2020-05-14 22:04:12 +02:00

116 lines
4.6 KiB
C++

/*! \mainpage Guide de démarrage rapide
*
* \section intro_sec Introduction
*
* Cette bibliothèque regroupe 3 classes distinctes : AdcSetting, MeasureUnit et ThermistorSettings.@n
* AdcSetting est une classe obsolète.@n
* MeasureUnit contient les méthodes de calculs de la température.@n
* ThermistorSettings définit les caractéristiques des thermistances.@n
*@n
* Pour avoir un exemple de code, se référer à l'application principale disponible : <a href="http://www.web-directories.tk/git/Th3maz1ng/projet3_temperature/src/branch/master/src/app/app.ino" target="_blank">ici</a>.
*
* \author Anatole SCHRAMM-HENRY
* \author Tim THUREL
* \date 29 Jan 2020
* \copyright All Right Reserved
*/
#ifndef MEASUREUNIT_H
#define MEASUREUNIT_H
#include <LTC2439.h>
#include "ThermistorSettings.h"
/*! @brief Cette classe propose des méthodes de calculs de la température.
*
*/
class MeasureUnit
{
public:
/*! @brief Enumération de retour d'erreur
*
*
*/
enum ERROR {
OK = 0, /**< OK Pas d'erreurs */
MALLOC_ERR = 1 /**< MALLOC_ERR Erreur lors de l'allocation dynamique de la mémoire (pas assez de RAM) */
};
/*! Le constructeur de la classe prend en paramètres :
* @param thermistorCount : le nombre de thermistance présente dans une branche.
* @param precResistor : la résistance de la résistance de précision en Ohms.
* @param thermistorSettings : un objet de type #ThermistorSettings.
* @param adc : une référence sur un objet de type #LTC2439.
*/
MeasureUnit(uint16_t thermistorCount, uint64_t precResistor, ThermistorSettings thermistorSettings, LTC2439 &adc);
/*! Le destructeur :
* Il libère la mémoire réservée lors de l'allocation dynamique.
*/
~MeasureUnit();
/*! Initialise l'objet.
* @warning : N'est pas obligatoire.
*/
void init();
/*! L'appel de la méthode run() est obligatoire pour le bon fonctionnement de MeasureUnit.
*
*/
void run();
/*! Définit un offset global à appliquer à la température.
* Cela peut être nécessaire pour corriger une erreur absolue de température.
* @param offset : l'offset en °C à appliquer à toutes les températures.
*/
void setGlobalTempOffset(double offset);
/*! Permet de récupérer l'offset de température global définit.
* @return double : la température en °C.
*/
double getGlobalTempOffset();
/*! Permet de récupérer le tableau d'offsets individuel cette fois-ci.
* @return : un pointeur sur le premier élément d'un tableau de double. La taille du tableau est égale à thermistorCount.
*/
double *getROffsetMap();
//Async methods
/*! Enumération utilisée en interne de la classe.
*
*/
enum STATE {IDLING, MEASURING, COMPUTING, MEASUREMENT_READY};
/*! Permet de lancer le calcul des températures de manière asynchrone.
* @return boolean : true si le lancement à réussi, false sinon (lancement alors qu'une mesure est déjà en cours par exemple).
*/
boolean startTemperatureMeasurement();
/*! Permet de savoir si le résultat du calcul des températures est prêt à être récupéré.
* @return boolean : true si oui, false sinon.
*/
boolean isMeasurementReady();
/*! Permet de récupérer le résultat d'un calcul de température suite à un appel de la méthode startTemperatureMeasurement().
* @return : un pointeur sur le premier élément d'un tableau de double. La taille du tableau est égale à thermistorCount. Si aucun résultat n'est prêt, NULL est retourné à la place.
*/
double *getAsyncTemperatures();
//End of assync methods
/*! Permet de récupérer la dernier statut d'erreur.
* @return #ERROR : le statut d'erreur.
*/
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)
uint16_t _thermistorCount;
uint64_t _precResistor;
ERROR _error;
LTC2439 &_adc;
ThermistorSettings _thermistorSettings;
//Async part
STATE _state;
uint8_t _channel, _offsetComputeIte,_offsetCounter;
double _courant[2];
boolean _triggerLevelOff; //Attribut permettant de savoir si un étalonnage a été demandé
};
#endif //MEASUREUNIT_H