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

89 lines
3.1 KiB
C++

/*
* Anatole SCHRAMM-HENRY
* Tim THUREL
* Température groupe 3
* Date 14/02/2020 00:05
*
* Classe permettant de piloter le STS21
* Capteur de température de la marque SENSIRION
* Précision : 0.2°C
*
* Tout droit réservé
*/
#ifndef STS21_H
#define STS21_H
#include "I2CDevice.h"
//Définition des commandes
#define HOLD_MASTER 0xE3
#define NO_HOLD_MASTER 0xF3
#define WRITE_USER_REG 0xE6
#define READ_USER_REG 0xE7
#define SOFT_RST 0xFE
//User register bits
#define END_OF_BAT 0x40
#define CHIP_HEATER 0x04
/*! @brief La classe STS21 permetant de dialoguer avec le STS21
*
*/
class STS21 : public I2CDevice
{
public:
/*! @brief Enumération de sélection de la précision de la capture de la température.
* Plus la précision est haute, plus temps d'acquisition est long.
*/
enum STS_RES
{
RES_11 = 3, /**< RES_11 pour une résolution sur 11 bits, la plus basse*/
RES_12 = 1, /**< RES_12 pour une résolution sur 12 bits*/
RES_13 = 2, /**< RES_13 pour une résolution sur 13 bits*/
RES_14 = 0 /**< RES_14 pour une résolution sur 14 bits, la plus haute et la résolution par défaut*/
};
/*! Le constructeur de la classe prend en paramètres :
* @param addr : l'adresse I2C du périphérique
*/
STS21(uint8_t addr = 0x4A):I2CDevice(addr), _onChipHeater(false), _stsRes(RES_14) {delay(20);}
/*! Le destructeur :
*
*/
~STS21(){}
/*! Initialise le périphérique
* @return boolean : true si l'initialisation a fonctionnée, false sinon.
* Dans le cas où l'initialisation échoue, vérifier les branchements et/ou l'adresse du périphérique.
*/
virtual boolean begin(){return I2CDevice::begin();};
/*! Demande l'acquisition d'une température d'une résolution définit via setResolution().
* @param noHold : si true, le périphérique met la ligne SCL au niveau bas pour bloquer le bus I2C durant la mesure de température, sinon le périphérique ne bloque pas le bus durant la mesure.
* @return double : la température en °C.
*/
double getTemperature(boolean noHold = true);//Degré celsius
/*! Définit la résolution des mesures de température à l'aide des valeurs STS_RES
* @param res : la résolution du type #STS_RES
* @return boolean : true si succès, false sinon.
*/
boolean setResolution(STS_RES res);
/*! Active ou désactive le module de chauffe interne.
* @param enabled : true pour l'activer, false sinon.
* @return boolean : true si succès, false sinon.
*/
boolean enableOnChipHeater(boolean enabled);
/*! Permet de faire un reset du périphérique.
* @return boolean : true si succès, false sinon.
*/
boolean reset();
/*! Permet de connaître l'état de la tension d'alimentation du capteur. Si la tension est inférieure à 2.25V ou non. Permet de détecter un niveau de batterie faible si le module est alimenté par batterie.
* @return boolean : true si la tension est inférieure à 2.25V, false sinon.
*/
boolean lowBattery();
protected:
private:
uint8_t readUserRegister();
boolean writeUserRegister(uint8_t value);
boolean _onChipHeater;
STS_RES _stsRes;
};
#endif //STS21_H