I2C HUMIDITY AND TEMPERATURE SENSOR
SI7021.h
- Committer:
- mcm
- Date:
- 2018-02-05
- Revision:
- 1:54da1ce19764
- Parent:
- 0:3d466d4c2cd2
- Child:
- 3:75cece7f7329
File content as of revision 1:54da1ce19764:
/** * @brief SI7021.h * @details I2C HUMIDITY AND TEMPERATURE SENSOR. * Header file. * * * @return NA * * @author Manuel Caballero * @date 5/February/2018 * @version 5/February/2018 The ORIGIN * @pre NaN. * @warning NaN * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ). */ #ifndef SI7021_H #define SI7021_H #include "mbed.h" /** Example: [todo] */ /*! Library for the SI7021 I2C Humidity and Temperature sensor. */ class SI7021 { public: /** * @brief DEFAULT ADDRESSES */ typedef enum { SI7021_ADDRESS = ( 0x40 << 1 ) /*!< SI7021 I2C Address */ } SI7021_address_t; // REGISTERS /** * @brief COMMAND CODE */ typedef enum { SI7021_MEASURE_RELATIVE_HUMIDITY_HOLD_MASTER_MODE = 0xE5, /*!< Measure Relative Humidity, Hold Master Mode */ SI7021_MEASURE_RELATIVE_HUMIDITY_NO_HOLD_MASTER_MODE = 0xF5, /*!< Measure Relative Humidity, No Hold Master Mode */ SI7021_MEASURE_TEMPERATURE_HOLD_MASTER_MODE = 0xE3, /*!< Measure Temperature, Hold Master Mode */ SI7021_MEASURE_TEMPERATURE_NO_HOLD_MASTER_MODE = 0xF3, /*!< Measure Temperature, No Hold Master Mode */ SI7021_READ_TEMPERATURE_VALUE_FROM_PREVIOUS_RH_MEASUREMENT = 0xE0, /*!< Read Temperature Value from Previous RH Measurement */ SI7021_RESET = 0xFE, /*!< Reset */ SI7021_WRITE_RH_T_USER_REGISTER_1 = 0xE6, /*!< Write RH/T User Register 1 */ SI7021_READ_RH_T_USER_REGISTER_1 = 0xE7, /*!< Read RH/T User Register 1 */ SI7021_WRITE_HEATER_CONTROL_REGISTER = 0x51, /*!< Write Heater Control Register */ SI7021_READ_HEATER_CONTROL_REGISTER = 0x11, /*!< Read Heater Control Register */ SI7021_READ_ELECTRONIC_ID_FIRST_BYTE_CMD1 = 0xFA, /*!< Read Electronic ID 1st Byte */ SI7021_READ_ELECTRONIC_ID_FIRST_BYTE_CMD2 = 0x0F, /*!< Read Electronic ID 1st Byte */ SI7021_READ_ELECTRONIC_ID_SECOND_BYTE_CMD1 = 0xFC, /*!< Read Electronic ID 2nd Byte */ SI7021_READ_ELECTRONIC_ID_SECOND_BYTE_CMD2 = 0xC9, /*!< Read Electronic ID 2nd Byte */ SI7021_READ_FIRMWARE_VERSION_CMD1 = 0x84, /*!< Read Firmware Revision */ SI7021_READ_FIRMWARE_VERSION_CMD2 = 0xB8 /*!< Read Firmware Revision */ } SI7021_command_code_t; // MASTER MODE /** * @brief MEASUREMENT RESOLUTION */ typedef enum { SI7021_HOLD_MASTER_MODE = 0x01, /*!< SI7021 HOLD MASTER MODE enabled */ SI7021_NO_HOLD_MASTER_MODE = 0x00 /*!< SI7021 NO HOLD MASTER MODE enabled */ } SI7021_master_mode_t; // USER REGISTER 1 /* NOTE: Reset Settings = 0011_1010. Except where noted, reserved register bits will always read back as “1,” and are not affected by write operations. For future compatibility, it is recommended that prior to a write operation, registers should be read. Then the values read from the RSVD bits should be written back unchanged during the write operation. */ /** * @brief MEASUREMENT RESOLUTION */ typedef enum { SI7021_RESOLUTION_MASK = 0x81, /*!< SI7021 Measurement Resolution */ SI7021_RESOLUTION_RH_12_TEMP_14 = 0x00, /*!< SI7021 12b RH 14b Temp. */ SI7021_RESOLUTION_RH_8_TEMP_12 = 0x01, /*!< SI7021 9b RH 12b Temp. */ SI7021_RESOLUTION_RH_10_TEMP_13 = 0x80, /*!< SI7021 10b RH 13b Temp. */ SI7021_RESOLUTION_RH_11_TEMP_11 = 0x81 /*!< SI7021 11b RH 11b Temp. */ } SI7021_measurement_resolution_t; /** * @brief VDDS */ /* NOTE: The minimum recommended operating voltage is 1.9 V. A transition of the VDD status bit from 0 to 1 indicates that VDD is between 1.8 V and 1.9 V. If the VDD drops below 1.8 V, the device will no longer operate correctly. */ typedef enum { SI7021_VDDS_STATUS_MASK = 0x40, /*!< SI7021 VDD mask. */ SI7021_VDDS_STATUS_VDD_OK = ( 0 << 6 ), /*!< VDD OK. */ SI7021_VDDS_STATUS_VDD_LOW = ( 1 << 6 ) /*!< VDD Low. */ } SI7021_vdds_status_t; /** * @brief HTRE */ typedef enum { SI7021_HTRE_MASK = 0x03, /*!< SI7021 HTRE Mask */ SI7021_HTRE_ENABLED = ( 1 << 2 ), /*!< SI7021 On-chip Heater Enable */ SI7021_HTRE_DISABLED = ( 0 << 2 ) /*!< SI7021 On-chip Heater Disable */ } SI7021_heater_t; #ifndef SI7021_VECTOR_STRUCT_H #define SI7021_VECTOR_STRUCT_H typedef struct { float RelativeHumidity; float Temperature; uint32_t ElectronicSerialNumber_LSB; uint32_t ElectronicSerialNumber_MSB; uint8_t FirmwareRevision; SI7021_vdds_status_t BatteryStatus; } SI7021_vector_data_t; #endif /** * @brief INTERNAL CONSTANTS */ typedef enum { SI7021_SUCCESS = 0, SI7021_FAILURE = 1, I2C_SUCCESS = 0 /*!< I2C communication was fine */ } SI7021_status_t; /** Create an SI7021 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. */ SI7021 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq ); /** Delete SI7021 object. */ ~SI7021(); /** It configures the device: resolution and heater. */ SI7021_status_t SI7021_Conf ( SI7021_measurement_resolution_t myResolution, SI7021_heater_t myHeater ); /** It performs a software reset. */ SI7021_status_t SI7021_SoftReset ( void ); /** It gets the electronic serial number. */ SI7021_status_t SI7021_GetElectronicSerialNumber ( SI7021_vector_data_t* mySerialNumber ); /** It gets the firmware revision. */ SI7021_status_t SI7021_GetFirmwareRevision ( SI7021_vector_data_t* myFirmwareRevision ); /** It sets the heater current. */ SI7021_status_t SI7021_SetHeaterCurrent ( char myHeaterCurrent ); /** It performs a new temperature measurement. */ SI7021_status_t SI7021_TriggerTemperature ( SI7021_master_mode_t myMode ); /** It read the temperature. */ SI7021_status_t SI7021_ReadTemperature ( SI7021_vector_data_t* myTemperature ); /** It reads the raw data from temperature. */ SI7021_status_t SI7021_ReadRawTemperature ( SI7021_vector_data_t* myTemperature ); /** It reads the raw temperature data after a relative humidity measurement was done. */ SI7021_status_t SI7021_ReadRawTemperatureFromRH ( SI7021_vector_data_t* myTemperature ); /** It reads the temperature after a relative humidity measurement was done. */ SI7021_status_t SI7021_ReadTemperatureFromRH ( SI7021_vector_data_t* myTemperature ); /** It performs a new relative humidity measurement. */ SI7021_status_t SI7021_TriggerHumidity ( SI7021_master_mode_t myMode ); /** It reads the relative humidity. */ SI7021_status_t SI7021_ReadHumidity ( SI7021_vector_data_t* myHumidity ); /** It reads the raw data from relative humidity. */ SI7021_status_t SI7021_ReadRawHumidity ( SI7021_vector_data_t* myHumidity ); /** It gets the battery status. */ SI7021_status_t SI7021_GetBatteryStatus ( SI7021_vector_data_t* myBatteryStatus ); private: I2C _i2c; uint32_t _SI7021_Addr; }; #endif