/*! \mainpage Guide de démarrage rapide * * \section intro_sec Introduction * * Cette bibliothèque inclue une classe : LTC2439.@n * Elle permet de piloter le LTC2439 qui est un ADC SPI 16 entrées d'une résolution de 16 bits.@n * Elle reprend le code de la bibliothèque écrite par Tim THUREL pour cet ADC en y ajoutant des méthodes asynchrones et en la rendant compatible avec l'ESP8266.@n * Voici un code d'exemple de l'utilisation du LTC2439 sur ESP8266 : * * \code{.cpp} * #include * * LTC2439 adc(2,12); * uint8_t channel(0); * * void setup() * { * Serial.begin(115200); * Serial.println("Starting setup"); * Serial.println("End setup"); * } * * void loop() * { * adc.startAsyncSample(channel); * * if(adc.asyncResultAvailable()) * { * int32_t raw = adc.getAsyncValue(); * Serial.printf("Conversion done, result for channel %u : %d, tension : %.2f\n", channel, raw, adc.convertToVoltage(raw)); * channel = channel == 15 ? 0 : channel + 1; * } * } * \endcode * * \author Anatole SCHRAMM-HENRY * \author Tim THUREL * \date 11 Mai 2020 * \copyright All Right Reserved */ #ifndef LTC2439_H #define LTC2439_H #include #include /*! @brief La classe LTC2439 permettant de dialoguer avec le LTC2439 * @warning Toutes les méthodes de cette classe ne sont pas implémentées. */ class LTC2439 { public: /*! Le constructeur de la classe prend en paramètres : * @param csPin : la broche du microcontrôleur reliée au chip select du périphérique. * @param sdoPin : la broche du microcontrôleur reliée à la broche MISO du périphérique. Nécessaire afin de récupérer l'information de fin de conversion de l'ADC. * @param vref : la plage de tension des entrées analogiques en mv. */ LTC2439(uint8_t csPin, uint8_t sdoPin, double vref = 3300); /*! Permet de définir vref * @param vref : la plage de tension des entrées analogiques en mv. */ void setVref(double vref); /*! Permet de récupérer la valeur la plage de tension définit vref. * @return double : la plage de tension des entrées analogiques en mv. */ double getVref(){return _vref;}; /*! Permet de récupérer la valeur numérique de la tension mesurée sur le canal * @param channel : le canal de 0 à 15 * @param sgl : indique si la mesure se fait en simple ou non. true pour simple, false pour différentielle. * @return int32_t : valeur numérique entière correspondant à la tension mesurée. * @warning La méthode n'est pas implémentée. */ int32_t sampleValue(uint8_t channel, boolean sgl = true); /*! Permet de récupérer la valeur numérique de la tension mesurée sur le dernier canal. * @return int32_t : valeur numérique entière correspondant à la tension mesurée. * @warning La méthode n'est pas implémentée. */ int32_t sampleValue(); /*! Comme sampleValue(), mais renvoie la tension samplée sur le canal en mv en se basant sur vref. * @param channel : le canal de 0 à 15 * @param sgl : indique si la mesure se fait en simple ou non. true pour simple, false pour différentielle. * @return double : la tension mesurée en mv. * @warning Cette méthode n'est pas implémentée. */ double sampleVoltage(uint8_t channel, boolean sgl = true); /*! Comme sampleVoltage(), mais renvoie la tension samplée sur le dernier canal en mv en se basant sur vref. * @return double : la tension mesurée en mv. * @warning Cette méthode n'est pas implémentée. */ double sampleVoltage(); //Methodes asynchrones /*! Permet de lancer un sample asynchrone de la tension sur l'entrée analogique channel. * @param channel : le canal de 0 à 15 * @param sgl : indique si la mesure se fait en simple ou non. true pour simple, false pour différentielle. * @param force : permet de forcer le sample dans le cas où le sample précédent n'est pas terminé. true force, false ne force pas. */ void startAsyncSample(uint8_t channel, boolean sgl = true, boolean force = false); /*! Permet de savoir si le dernier sample lancé est prêt à être récupéré. * @return boolean : true si il est prêt, false sinon. */ boolean asyncResultAvailable(); /*! Permet de convertir la valeur numérique en tension en se basant sur vref. * @return double : tension en mv. */ double convertToVoltage(int32_t value); /*! Permet de récupérer la valeur numérique associée à la tension mesurée par l'ADC suite à l'appel de la fonction startAsyncSample(). * @return int32_t : valeur numérique entière correspondante à la tension mesurée. */ int32_t getAsyncValue(); protected: private: uint8_t _csPin, _statusPin; boolean _sampleTriggered; double _vref; //Delta de tension de la plage : vref-gnd en mV uint8_t _adcRes; double _quantum; const uint8_t _channelMap[16]; const SPISettings _SPIsettings; }; #endif //LTC2439_H