/*! \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 : ici. * * \author Anatole SCHRAMM-HENRY * \author Tim THUREL * \date 29 Jan 2020 * \copyright All Right Reserved */ #ifndef MEASUREUNIT_H #define MEASUREUNIT_H #include #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