Manuel Caballero / HTU21D
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers HTU21D.h Source File

HTU21D.h

00001 /**
00002  * @brief       HTU21D.h
00003  * @details     Digital humidity sensor with temperature output.
00004  *              Header file.
00005  *
00006  *
00007  * @return      NA
00008  *
00009  * @author      Manuel Caballero
00010  * @date        31/August/2017
00011  * @version     31/August/2017    The ORIGIN
00012  * @pre         NaN.
00013  * @warning     NaN
00014  * @pre         This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
00015  */
00016 #ifndef HTU21D_H
00017 #define HTU21D_H
00018 
00019 #include "mbed.h"
00020 
00021 
00022 /**
00023     Example:
00024 
00025 #include "mbed.h"
00026 #include "HTU21D.h"
00027 
00028 HTU21D myTempRXSensor      ( I2C_SDA, I2C_SCL, HTU21D::HTU21D_ADDRESS, 400000 );
00029 Serial pc                  ( USBTX, USBRX );                                                 // tx, rx
00030 
00031 
00032 Ticker serial;
00033 
00034 DigitalOut myled(LED1);
00035 
00036 HTU21D::Vector_temperature_f    myTemperature;
00037 HTU21D::Vector_humidity_f       myHumidity;
00038 
00039 
00040 
00041 void sendDATA ( void )
00042 {
00043     HTU21D::HTU21D_user_register_status_t myBatteryStatus;
00044     
00045     myled = 1;
00046     
00047     // Get Temperature
00048     myTempRXSensor.HTU21D_TriggerTemperature ();
00049     myTempRXSensor.HTU21D_ReadTemperature    ( &myTemperature );
00050     
00051     // Get Humidity
00052     myTempRXSensor.HTU21D_TriggerHumidity ();
00053     myTempRXSensor.HTU21D_ReadHumidity    ( &myHumidity );
00054     
00055     // Get Battery Status
00056     myTempRXSensor.HTU21D_BatteryStatus   ( &myBatteryStatus );
00057     
00058     // Send data through the UART
00059     pc.printf( "\nTemperature: %0.01f\nHumidity: %0.01f\n", myTemperature.Temperature, myHumidity.Humidity );
00060     
00061     if ( myBatteryStatus == HTU21D::STATUS_END_BATTERY_HIGH_2V25 )
00062         pc.printf( "Battery status higher than 2.25V\r\n" );
00063     else
00064         pc.printf( "Battery status lower than 2.25V\r\n" );
00065         
00066     myled = 0;
00067 }
00068 
00069 
00070 int main()
00071 {
00072     pc.baud ( 115200 );
00073 
00074     myTempRXSensor.HTU21D_SoftReset ();
00075     myTempRXSensor.HTU21D_Init      ( HTU21D::MODE_NO_HOLD_MASTER, HTU21D::RESOLUTION_12RH_14TEMP, HTU21D::HEATER_DISABLED );
00076 
00077 
00078     serial.attach( &sendDATA, 1 );                      // the address of the function to be attached ( sendDATA ) and the interval ( 1s )
00079 
00080     // Let the callbacks take care of everything
00081     while(1)  sleep();
00082 }
00083 */
00084 
00085 
00086 /*!
00087  Library for the HTU21D Digital humidity sensor with temperature output.
00088 */
00089 class HTU21D
00090 {
00091 public:
00092     /**
00093       * @brief   DEFAULT ADDRESSES
00094       */
00095     typedef enum {
00096         HTU21D_ADDRESS     =   ( 0x40 << 1 )
00097     } HTU21D_address_t;
00098 
00099 
00100     /**
00101      * @brief   COMMAND REGISTERS
00102      */
00103 #define HTU21D_TRIGGER_TEMPERATURE_MEASUREMENT_HOLD_MASTER          0xE3
00104 #define HTU21D_TRIGGER_HUMIDITY_MEASUREMENT_HOLD_MASTER             0xE5
00105 #define HTU21D_TRIGGER_TEMPERATURE_MEASUREMENT_NO_HOLD_MASTER       0xF3
00106 #define HTU21D_TRIGGER_HUMIDITY_MEASUREMENT_NO_HOLD_MASTER          0xF5
00107 #define HTU21D_WRITE_REGISTER                                       0xE6
00108 #define HTU21D_READ_REGISTER                                        0xE7
00109 #define HTU21D_SOFT_RESET                                           0xFE
00110 
00111 
00112     /* User Register */
00113     /**
00114       * @brief   RESOLUTION
00115       */
00116     typedef enum {
00117         RESOLUTION_12RH_14TEMP           =   0,          /*!<  Resolution: RH 12-bits, T 14-bits                 */
00118         RESOLUTION_8RH_12TEMP            =   1,          /*!<  Resolution: RH 8-bits, T 12-bits                  */
00119         RESOLUTION_10RH_13TEMP           =   2,          /*!<  Resolution: RH 10-bits, T 13-bits                 */
00120         RESOLUTION_11RH_11TEMP           =   3           /*!<  Resolution: RH 11-bits, T 11-bits                 */
00121     } HTU21D_user_register_resolution_t;
00122     
00123     /**
00124       * @brief   STATUS: END OF BATTERY
00125       */
00126     typedef enum {
00127         STATUS_END_BATTERY_HIGH_2V25      =   0,         /*!<  Status: RH 12-bits, T 14-bits                      */
00128         STATUS_END_BATTERY_LOW_2V25       =   1          /*!<  Status: RH 8-bits, T 12-bits                       */
00129     } HTU21D_user_register_status_t;
00130     
00131     /**
00132       * @brief   ON-CHIP HEATER
00133       */
00134     typedef enum {
00135         HEATER_ENABLED                   =   0,          /*!<  Heater enabled                                    */
00136         HEATER_DISABLED                  =   1           /*!<  Heater disabled                                   */
00137     } HTU21D_user_register_heater_t;
00138     
00139     /**
00140       * @brief   OTP RELOAD
00141       */
00142     typedef enum {
00143         OTP_ENABLED                      =   0,          /*!<  OTP enabled                                       */
00144         OTP_DISABLED                     =   1           /*!<  OTP disabled                                      */
00145     } HTU21D_user_register_otp_t;
00146 
00147 
00148     
00149     /* Mode of working */
00150     /**
00151       * @brief   MODE
00152       */
00153     typedef enum {
00154         MODE_HOLD_MASTER                 =   0,          /*!<  Mode Hold master                                 */
00155         MODE_NO_HOLD_MASTER              =   1           /*!<  Mode No hold master                              */
00156     } HTU21D_master_mode_t;
00157 
00158 
00159 
00160 
00161 
00162 #ifndef VECTOR_STRUCT_H
00163 #define VECTOR_STRUCT_H
00164     typedef struct {
00165         char RawTemperature[3];
00166     } Vector_raw_temperature_t;
00167 
00168     typedef struct {
00169         char RawHumidity[3];
00170     } Vector_raw_humidity_t;
00171     
00172     typedef struct {
00173         float Temperature;
00174     } Vector_temperature_f;
00175 
00176     typedef struct {
00177         float Humidity;
00178     } Vector_humidity_f;
00179 #endif
00180 
00181 
00182     /**
00183       * @brief   INTERNAL CONSTANTS
00184       */
00185     typedef enum {
00186         HTU21D_SUCCESS     =       0,
00187         HTU21D_FAILURE     =       1,
00188         I2C_SUCCESS         =       0                                           /*!<   I2C communication was fine     */
00189     } HTU21D_status_t;
00190 
00191 
00192 
00193 
00194     /** Create an HTU21D object connected to the specified I2C pins.
00195       *
00196       * @param sda     I2C data pin
00197       * @param scl     I2C clock pin
00198       * @param addr    I2C slave address
00199       * @param freq    I2C frequency in Hz.
00200       */
00201     HTU21D ( PinName sda, PinName scl, uint32_t addr, uint32_t freq );
00202 
00203     /** Delete HTU21D object.
00204      */
00205     ~HTU21D();
00206 
00207     /** It configures the device.
00208      */
00209     HTU21D_status_t  HTU21D_Init                          ( HTU21D_master_mode_t myMode, HTU21D_user_register_resolution_t myResolution, HTU21D_user_register_heater_t myHeater );
00210 
00211     /** It resets the device by software.
00212      */
00213     HTU21D_status_t  HTU21D_SoftReset                     ( void );
00214 
00215     /** It triggers a new temperature measurement.
00216      */
00217     HTU21D_status_t  HTU21D_TriggerTemperature            ( void );
00218 
00219     /** It reads the raw temperature.
00220      */
00221     HTU21D_status_t  HTU21D_ReadRawTemperature            ( Vector_raw_temperature_t* myRawTemperature );
00222     
00223     /** It reads the temperature.
00224      */
00225     HTU21D_status_t  HTU21D_ReadTemperature               ( Vector_temperature_f* myTemperature );
00226 
00227     /** It triggers a new humidity measurement.
00228      */
00229     HTU21D_status_t  HTU21D_TriggerHumidity               ( void );
00230 
00231     /** It reads the raw humidity.
00232      */
00233     HTU21D_status_t  HTU21D_ReadRawHumidity               ( Vector_raw_humidity_t* myRawHumidity );
00234     
00235     /** It reads the humidity.
00236      */
00237     HTU21D_status_t  HTU21D_ReadHumidity                  ( Vector_humidity_f* myHumidity );
00238 
00239     /** It gets the battery status.
00240      */
00241     HTU21D_status_t  HTU21D_BatteryStatus                 ( HTU21D_user_register_status_t* myBattStatus );
00242 
00243 private:
00244     I2C      i2c;
00245     uint32_t HTU21D_Addr;
00246     uint32_t HTU21D_Mode;
00247     uint32_t HTU21D_Resolution;
00248 };
00249 
00250 #endif