Digital humidity sensor with temperature output
HTU21D.h
- Committer:
- mcm
- Date:
- 2017-09-05
- Revision:
- 2:ad5e3555c7ef
- Parent:
- 1:da1f21719567
File content as of revision 2:ad5e3555c7ef:
/** * @brief HTU21D.h * @details Digital humidity sensor with temperature output. * Header file. * * * @return NA * * @author Manuel Caballero * @date 31/August/2017 * @version 31/August/2017 The ORIGIN * @pre NaN. * @warning NaN * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ). */ #ifndef HTU21D_H #define HTU21D_H #include "mbed.h" /** Example: #include "mbed.h" #include "HTU21D.h" HTU21D myTempRXSensor ( I2C_SDA, I2C_SCL, HTU21D::HTU21D_ADDRESS, 400000 ); Serial pc ( USBTX, USBRX ); // tx, rx Ticker serial; DigitalOut myled(LED1); HTU21D::Vector_temperature_f myTemperature; HTU21D::Vector_humidity_f myHumidity; void sendDATA ( void ) { HTU21D::HTU21D_user_register_status_t myBatteryStatus; myled = 1; // Get Temperature myTempRXSensor.HTU21D_TriggerTemperature (); myTempRXSensor.HTU21D_ReadTemperature ( &myTemperature ); // Get Humidity myTempRXSensor.HTU21D_TriggerHumidity (); myTempRXSensor.HTU21D_ReadHumidity ( &myHumidity ); // Get Battery Status myTempRXSensor.HTU21D_BatteryStatus ( &myBatteryStatus ); // Send data through the UART pc.printf( "\nTemperature: %0.01f\nHumidity: %0.01f\n", myTemperature.Temperature, myHumidity.Humidity ); if ( myBatteryStatus == HTU21D::STATUS_END_BATTERY_HIGH_2V25 ) pc.printf( "Battery status higher than 2.25V\r\n" ); else pc.printf( "Battery status lower than 2.25V\r\n" ); myled = 0; } int main() { pc.baud ( 115200 ); myTempRXSensor.HTU21D_SoftReset (); myTempRXSensor.HTU21D_Init ( HTU21D::MODE_NO_HOLD_MASTER, HTU21D::RESOLUTION_12RH_14TEMP, HTU21D::HEATER_DISABLED ); serial.attach( &sendDATA, 1 ); // the address of the function to be attached ( sendDATA ) and the interval ( 1s ) // Let the callbacks take care of everything while(1) sleep(); } */ /*! Library for the HTU21D Digital humidity sensor with temperature output. */ class HTU21D { public: /** * @brief DEFAULT ADDRESSES */ typedef enum { HTU21D_ADDRESS = ( 0x40 << 1 ) } HTU21D_address_t; /** * @brief COMMAND REGISTERS */ #define HTU21D_TRIGGER_TEMPERATURE_MEASUREMENT_HOLD_MASTER 0xE3 #define HTU21D_TRIGGER_HUMIDITY_MEASUREMENT_HOLD_MASTER 0xE5 #define HTU21D_TRIGGER_TEMPERATURE_MEASUREMENT_NO_HOLD_MASTER 0xF3 #define HTU21D_TRIGGER_HUMIDITY_MEASUREMENT_NO_HOLD_MASTER 0xF5 #define HTU21D_WRITE_REGISTER 0xE6 #define HTU21D_READ_REGISTER 0xE7 #define HTU21D_SOFT_RESET 0xFE /* User Register */ /** * @brief RESOLUTION */ typedef enum { RESOLUTION_12RH_14TEMP = 0, /*!< Resolution: RH 12-bits, T 14-bits */ RESOLUTION_8RH_12TEMP = 1, /*!< Resolution: RH 8-bits, T 12-bits */ RESOLUTION_10RH_13TEMP = 2, /*!< Resolution: RH 10-bits, T 13-bits */ RESOLUTION_11RH_11TEMP = 3 /*!< Resolution: RH 11-bits, T 11-bits */ } HTU21D_user_register_resolution_t; /** * @brief STATUS: END OF BATTERY */ typedef enum { STATUS_END_BATTERY_HIGH_2V25 = 0, /*!< Status: RH 12-bits, T 14-bits */ STATUS_END_BATTERY_LOW_2V25 = 1 /*!< Status: RH 8-bits, T 12-bits */ } HTU21D_user_register_status_t; /** * @brief ON-CHIP HEATER */ typedef enum { HEATER_ENABLED = 0, /*!< Heater enabled */ HEATER_DISABLED = 1 /*!< Heater disabled */ } HTU21D_user_register_heater_t; /** * @brief OTP RELOAD */ typedef enum { OTP_ENABLED = 0, /*!< OTP enabled */ OTP_DISABLED = 1 /*!< OTP disabled */ } HTU21D_user_register_otp_t; /* Mode of working */ /** * @brief MODE */ typedef enum { MODE_HOLD_MASTER = 0, /*!< Mode Hold master */ MODE_NO_HOLD_MASTER = 1 /*!< Mode No hold master */ } HTU21D_master_mode_t; #ifndef VECTOR_STRUCT_H #define VECTOR_STRUCT_H typedef struct { char RawTemperature[3]; } Vector_raw_temperature_t; typedef struct { char RawHumidity[3]; } Vector_raw_humidity_t; typedef struct { float Temperature; } Vector_temperature_f; typedef struct { float Humidity; } Vector_humidity_f; #endif /** * @brief INTERNAL CONSTANTS */ typedef enum { HTU21D_SUCCESS = 0, HTU21D_FAILURE = 1, I2C_SUCCESS = 0 /*!< I2C communication was fine */ } HTU21D_status_t; /** Create an HTU21D object connected to the specified I2C pins. * * @param sda I2C data pin * @param scl I2C clock pin * @param addr I2C slave address * @param freq I2C frequency in Hz. */ HTU21D ( PinName sda, PinName scl, uint32_t addr, uint32_t freq ); /** Delete HTU21D object. */ ~HTU21D(); /** It configures the device. */ HTU21D_status_t HTU21D_Init ( HTU21D_master_mode_t myMode, HTU21D_user_register_resolution_t myResolution, HTU21D_user_register_heater_t myHeater ); /** It resets the device by software. */ HTU21D_status_t HTU21D_SoftReset ( void ); /** It triggers a new temperature measurement. */ HTU21D_status_t HTU21D_TriggerTemperature ( void ); /** It reads the raw temperature. */ HTU21D_status_t HTU21D_ReadRawTemperature ( Vector_raw_temperature_t* myRawTemperature ); /** It reads the temperature. */ HTU21D_status_t HTU21D_ReadTemperature ( Vector_temperature_f* myTemperature ); /** It triggers a new humidity measurement. */ HTU21D_status_t HTU21D_TriggerHumidity ( void ); /** It reads the raw humidity. */ HTU21D_status_t HTU21D_ReadRawHumidity ( Vector_raw_humidity_t* myRawHumidity ); /** It reads the humidity. */ HTU21D_status_t HTU21D_ReadHumidity ( Vector_humidity_f* myHumidity ); /** It gets the battery status. */ HTU21D_status_t HTU21D_BatteryStatus ( HTU21D_user_register_status_t* myBattStatus ); private: I2C i2c; uint32_t HTU21D_Addr; uint32_t HTU21D_Mode; uint32_t HTU21D_Resolution; }; #endif