projet3_temperature/lib/LTC2439Lib/LTC2439.h
2020-05-14 16:15:09 +02:00

123 lines
4.8 KiB
C++

/*! \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.h>
*
* 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 <Arduino.h>
#include <SPI.h>
/*! @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