/*
 * 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

class STS21 : public I2CDevice
{
  public:
    enum STS_RES {RES_11 = 3, RES_12 = 1, RES_13 = 2, RES_14 = 0};
    STS21(uint8_t addr = 0x4A):I2CDevice(addr), _onChipHeater(false), _stsRes(RES_14) {delay(20);}
    ~STS21(){}
    virtual boolean begin(){return I2CDevice::begin();};
    double getTemperature(boolean noHold = true);//Degré celsius
    boolean setResolution(STS_RES res);
    boolean enableOnChipHeater(boolean enabled);
    boolean reset();
    boolean lowBattery();//Retourne vrai si le bit indiquant un niveau de batterie faible est présent, faux sinon
  protected:
  private:
    uint8_t readUserRegister();
    boolean writeUserRegister(uint8_t value);
    boolean _onChipHeater;
    STS_RES _stsRes;
};

#endif //STS21_H
