Manuel Caballero / HTS221

Dependents:   Arduino_Nano33BLESense_examples

Committer:
mcm
Date:
Fri May 31 11:09:50 2019 +0000
Revision:
1:ab60d7a79df0
Parent:
0:21b3c0c7b5f7
Child:
3:1fc3a35d731a
Header file was completed and it is ready to be tested

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 1:ab60d7a79df0 1 /**
mcm 1:ab60d7a79df0 2 * @brief HTS221.h
mcm 1:ab60d7a79df0 3 * @details Capacitive digital sensor for relative humidity and temperature.
mcm 1:ab60d7a79df0 4 * Header file.
mcm 1:ab60d7a79df0 5 *
mcm 1:ab60d7a79df0 6 *
mcm 1:ab60d7a79df0 7 * @return N/A
mcm 1:ab60d7a79df0 8 *
mcm 1:ab60d7a79df0 9 * @author Manuel Caballero
mcm 1:ab60d7a79df0 10 * @date 31/May/2019
mcm 1:ab60d7a79df0 11 * @version 31/May/2019 The ORIGIN
mcm 1:ab60d7a79df0 12 * @pre N/A.
mcm 1:ab60d7a79df0 13 * @warning N/A
mcm 1:ab60d7a79df0 14 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ). All rights reserved.
mcm 1:ab60d7a79df0 15 */
mcm 1:ab60d7a79df0 16 #ifndef HTS221_H
mcm 1:ab60d7a79df0 17 #define HTS221_H
mcm 1:ab60d7a79df0 18
mcm 1:ab60d7a79df0 19 #include "mbed.h"
mcm 1:ab60d7a79df0 20
mcm 1:ab60d7a79df0 21
mcm 1:ab60d7a79df0 22 /**
mcm 1:ab60d7a79df0 23 Example:
mcm 1:ab60d7a79df0 24 @code
mcm 1:ab60d7a79df0 25
mcm 1:ab60d7a79df0 26 @endcode
mcm 1:ab60d7a79df0 27 */
mcm 1:ab60d7a79df0 28
mcm 1:ab60d7a79df0 29
mcm 1:ab60d7a79df0 30 /*!
mcm 1:ab60d7a79df0 31 Library for the HTS221 Capacitive digital sensor for relative humidity and temperature.
mcm 1:ab60d7a79df0 32 */
mcm 1:ab60d7a79df0 33 class HTS221
mcm 1:ab60d7a79df0 34 {
mcm 1:ab60d7a79df0 35 public:
mcm 1:ab60d7a79df0 36 typedef enum {
mcm 1:ab60d7a79df0 37 HTS221_ADDRESS = ( 0b1011111 << 1U ) /*!< I2C slave address byte */
mcm 1:ab60d7a79df0 38 } HTS221_address_t;
mcm 1:ab60d7a79df0 39
mcm 1:ab60d7a79df0 40
mcm 1:ab60d7a79df0 41
mcm 1:ab60d7a79df0 42 /**
mcm 1:ab60d7a79df0 43 * @brief REGISTERS
mcm 1:ab60d7a79df0 44 */
mcm 1:ab60d7a79df0 45 typedef enum {
mcm 1:ab60d7a79df0 46 HTS221_WHO_AM_I = 0x0F, /*!< Device identification */
mcm 1:ab60d7a79df0 47 HTS221_AV_CONF = 0x10, /*!< Humidity and temperature resolution mode */
mcm 1:ab60d7a79df0 48 HTS221_CTRL_REG1 = 0x20, /*!< Control register 1 */
mcm 1:ab60d7a79df0 49 HTS221_CTRL_REG2 = 0x21, /*!< Control register 2 */
mcm 1:ab60d7a79df0 50 HTS221_CTRL_REG3 = 0x22, /*!< Control register 3 */
mcm 1:ab60d7a79df0 51 HTS221_STATUS_REG = 0x27, /*!< Status register */
mcm 1:ab60d7a79df0 52 HTS221_HUMIDITY_OUT_L = 0x28, /*!< Relative humidity data (LSB) */
mcm 1:ab60d7a79df0 53 HTS221_HUMIDITY_OUT_H = 0x29, /*!< Relative humidity data (MSB) */
mcm 1:ab60d7a79df0 54 HTS221_TEMP_OUT_L = 0x2A, /*!< Temperature data (LSB) */
mcm 1:ab60d7a79df0 55 HTS221_TEMP_OUT_H = 0x2B, /*!< Temperature data (MSB) */
mcm 1:ab60d7a79df0 56 HTS221_CALIB_0 = 0x30, /*!< Calibration register */
mcm 1:ab60d7a79df0 57 HTS221_CALIB_1 = 0x31, /*!< Calibration register */
mcm 1:ab60d7a79df0 58 HTS221_CALIB_2 = 0x32, /*!< Calibration register */
mcm 1:ab60d7a79df0 59 HTS221_CALIB_3 = 0x33, /*!< Calibration register */
mcm 1:ab60d7a79df0 60 HTS221_CALIB_4 = 0x34, /*!< Calibration register */
mcm 1:ab60d7a79df0 61 HTS221_CALIB_5 = 0x35, /*!< Calibration register */
mcm 1:ab60d7a79df0 62 HTS221_CALIB_6 = 0x36, /*!< Calibration register */
mcm 1:ab60d7a79df0 63 HTS221_CALIB_7 = 0x37, /*!< Calibration register */
mcm 1:ab60d7a79df0 64 HTS221_CALIB_8 = 0x38, /*!< Calibration register */
mcm 1:ab60d7a79df0 65 HTS221_CALIB_9 = 0x39, /*!< Calibration register */
mcm 1:ab60d7a79df0 66 HTS221_CALIB_A = 0x3A, /*!< Calibration register */
mcm 1:ab60d7a79df0 67 HTS221_CALIB_B = 0x3B, /*!< Calibration register */
mcm 1:ab60d7a79df0 68 HTS221_CALIB_C = 0x3C, /*!< Calibration register */
mcm 1:ab60d7a79df0 69 HTS221_CALIB_D = 0x3D, /*!< Calibration register */
mcm 1:ab60d7a79df0 70 HTS221_CALIB_E = 0x3E, /*!< Calibration register */
mcm 1:ab60d7a79df0 71 HTS221_CALIB_F = 0x3F /*!< Calibration register */
mcm 1:ab60d7a79df0 72 } HTS221_registers_t;
mcm 1:ab60d7a79df0 73
mcm 1:ab60d7a79df0 74
mcm 1:ab60d7a79df0 75
mcm 1:ab60d7a79df0 76 /**
mcm 1:ab60d7a79df0 77 * @brief WHO_AM_I REGISTER
mcm 1:ab60d7a79df0 78 */
mcm 1:ab60d7a79df0 79 typedef enum {
mcm 1:ab60d7a79df0 80 WHO_AM_I_MASK = 0xFF, /*!< WHO_AM_I mask */
mcm 1:ab60d7a79df0 81 WHO_AM_I_VALUE = 0xBC /*!< WHO_AM_I value */
mcm 1:ab60d7a79df0 82 } HTS221_who_am_i_t;
mcm 1:ab60d7a79df0 83
mcm 1:ab60d7a79df0 84
mcm 1:ab60d7a79df0 85
mcm 1:ab60d7a79df0 86 /**
mcm 1:ab60d7a79df0 87 * @brief AV_CONF REGISTER
mcm 1:ab60d7a79df0 88 */
mcm 1:ab60d7a79df0 89 /* AVGT <5:3>
mcm 1:ab60d7a79df0 90 * NOTE: Numbers of averaged temperature samples ( 2-256 ).
mcm 1:ab60d7a79df0 91 */
mcm 1:ab60d7a79df0 92 typedef enum {
mcm 1:ab60d7a79df0 93 AV_CONF_AVGT_MASK = ( 0b111 << 3U ), /*!< AVGT mask */
mcm 1:ab60d7a79df0 94 AV_CONF_AVGT_2 = ( 0b000 << 3U ), /*!< AVGT Nr. internal average 2 */
mcm 1:ab60d7a79df0 95 AV_CONF_AVGT_4 = ( 0b001 << 3U ), /*!< AVGT Nr. internal average 4 */
mcm 1:ab60d7a79df0 96 AV_CONF_AVGT_8 = ( 0b010 << 3U ), /*!< AVGT Nr. internal average 8 */
mcm 1:ab60d7a79df0 97 AV_CONF_AVGT_16 = ( 0b011 << 3U ), /*!< AVGT Nr. internal average 16 [ Default ] */
mcm 1:ab60d7a79df0 98 AV_CONF_AVGT_32 = ( 0b100 << 3U ), /*!< AVGT Nr. internal average 32 */
mcm 1:ab60d7a79df0 99 AV_CONF_AVGT_64 = ( 0b101 << 3U ), /*!< AVGT Nr. internal average 64 */
mcm 1:ab60d7a79df0 100 AV_CONF_AVGT_128 = ( 0b110 << 3U ), /*!< AVGT Nr. internal average 128 */
mcm 1:ab60d7a79df0 101 AV_CONF_AVGT_256 = ( 0b111 << 3U ) /*!< AVGT Nr. internal average 256 */
mcm 1:ab60d7a79df0 102 } HTS221_av_config_avgt_t;
mcm 1:ab60d7a79df0 103
mcm 1:ab60d7a79df0 104
mcm 1:ab60d7a79df0 105 /* AVGH <2:0>
mcm 1:ab60d7a79df0 106 * NOTE: Numbers of averaged humidity samples ( 4-512 ).
mcm 1:ab60d7a79df0 107 */
mcm 1:ab60d7a79df0 108 typedef enum {
mcm 1:ab60d7a79df0 109 AV_CONF_AVGH_MASK = ( 0b111 << 0U ), /*!< AVGH mask */
mcm 1:ab60d7a79df0 110 AV_CONF_AVGH_4 = ( 0b000 << 0U ), /*!< AVGH Nr. internal average 4 */
mcm 1:ab60d7a79df0 111 AV_CONF_AVGH_8 = ( 0b001 << 0U ), /*!< AVGH Nr. internal average 8 */
mcm 1:ab60d7a79df0 112 AV_CONF_AVGH_16 = ( 0b010 << 0U ), /*!< AVGH Nr. internal average 16 */
mcm 1:ab60d7a79df0 113 AV_CONF_AVGH_32 = ( 0b011 << 0U ), /*!< AVGH Nr. internal average 32 [ Default ] */
mcm 1:ab60d7a79df0 114 AV_CONF_AVGH_64 = ( 0b100 << 0U ), /*!< AVGH Nr. internal average 64 */
mcm 1:ab60d7a79df0 115 AV_CONF_AVGH_128 = ( 0b101 << 0U ), /*!< AVGH Nr. internal average 128 */
mcm 1:ab60d7a79df0 116 AV_CONF_AVGH_256 = ( 0b110 << 0U ), /*!< AVGH Nr. internal average 256 */
mcm 1:ab60d7a79df0 117 AV_CONF_AVGH_512 = ( 0b111 << 0U ) /*!< AVGH Nr. internal average 512 */
mcm 1:ab60d7a79df0 118 } HTS221_av_config_avgh_t;
mcm 1:ab60d7a79df0 119
mcm 1:ab60d7a79df0 120
mcm 1:ab60d7a79df0 121
mcm 1:ab60d7a79df0 122 /**
mcm 1:ab60d7a79df0 123 * @brief CTRL_REG1 REGISTER
mcm 1:ab60d7a79df0 124 */
mcm 1:ab60d7a79df0 125 /* PD <7>
mcm 1:ab60d7a79df0 126 * NOTE: Power-down control.
mcm 1:ab60d7a79df0 127 */
mcm 1:ab60d7a79df0 128 typedef enum {
mcm 1:ab60d7a79df0 129 CTRL_REG1_PD_MASK = ( 1U << 7U ), /*!< PD mask */
mcm 1:ab60d7a79df0 130 CTRL_REG1_PD_POWER_DOWN_MODE = ( 0U << 7U ), /*!< PD power-down mode [ Default ] */
mcm 1:ab60d7a79df0 131 CTRL_REG1_PD_ACTIVE_MODE = ( 1U << 7U ) /*!< PD active mode */
mcm 1:ab60d7a79df0 132 } HTS221_ctrl_reg1_pd_t;
mcm 1:ab60d7a79df0 133
mcm 1:ab60d7a79df0 134
mcm 1:ab60d7a79df0 135 /* BDU <2>
mcm 1:ab60d7a79df0 136 * NOTE: Block data update.
mcm 1:ab60d7a79df0 137 */
mcm 1:ab60d7a79df0 138 typedef enum {
mcm 1:ab60d7a79df0 139 CTRL_REG1_BDU_MASK = ( 1U << 2U ), /*!< BDU mask */
mcm 1:ab60d7a79df0 140 CTRL_REG1_BDU_CONTINUOUS_UPDATE = ( 0U << 2U ), /*!< Continuous update */
mcm 1:ab60d7a79df0 141 CTRL_REG1_BDU_DEFAULT_MODE = ( 1U << 2U ) /*!< Output registers not updated until MSB and LSB reading [ Default ] */
mcm 1:ab60d7a79df0 142 } HTS221_ctrl_reg1_bdu_t;
mcm 1:ab60d7a79df0 143
mcm 1:ab60d7a79df0 144
mcm 1:ab60d7a79df0 145 /* ODR <1:0>
mcm 1:ab60d7a79df0 146 * NOTE: Output data rate selection.
mcm 1:ab60d7a79df0 147 */
mcm 1:ab60d7a79df0 148 typedef enum {
mcm 1:ab60d7a79df0 149 CTRL_REG1_ODR_MASK = ( 0b11 << 0U ), /*!< ODR mask */
mcm 1:ab60d7a79df0 150 CTRL_REG1_ODR_ONE_SHOT = ( 0b00 << 0U ), /*!< One-shot */
mcm 1:ab60d7a79df0 151 CTRL_REG1_ODR_1_HZ = ( 0b01 << 0U ), /*!< 1 Hz */
mcm 1:ab60d7a79df0 152 CTRL_REG1_ODR_7_HZ = ( 0b10 << 0U ), /*!< 7 Hz */
mcm 1:ab60d7a79df0 153 CTRL_REG1_ODR_12_5_HZ = ( 0b11 << 0U ) /*!< 12.5 Hz */
mcm 1:ab60d7a79df0 154 } HTS221_ctrl_reg1_odr_t;
mcm 1:ab60d7a79df0 155
mcm 1:ab60d7a79df0 156
mcm 1:ab60d7a79df0 157
mcm 1:ab60d7a79df0 158 /**
mcm 1:ab60d7a79df0 159 * @brief CTRL_REG2 REGISTER
mcm 1:ab60d7a79df0 160 */
mcm 1:ab60d7a79df0 161 /* BOOT <7>
mcm 1:ab60d7a79df0 162 * NOTE: Reboot memory content.
mcm 1:ab60d7a79df0 163 */
mcm 1:ab60d7a79df0 164 typedef enum {
mcm 1:ab60d7a79df0 165 CTRL_REG2_BOOT_MASK = ( 1U << 7U ), /*!< BOOT mask */
mcm 1:ab60d7a79df0 166 CTRL_REG2_BOOT_NORMAL_MODE = ( 0U << 7U ), /*!< normal mode [ Default ] */
mcm 1:ab60d7a79df0 167 CTRL_REG2_BOOT_REBOOT_MEMORY_CONTENT = ( 1U << 7U ) /*!< reboot memory content */
mcm 1:ab60d7a79df0 168 } HTS221_ctrl_reg2_boot_t;
mcm 1:ab60d7a79df0 169
mcm 1:ab60d7a79df0 170
mcm 1:ab60d7a79df0 171 /* Heater <1>
mcm 1:ab60d7a79df0 172 * NOTE: Controling an internal heating element.
mcm 1:ab60d7a79df0 173 */
mcm 1:ab60d7a79df0 174 typedef enum {
mcm 1:ab60d7a79df0 175 CTRL_REG2_HEATER_MASK = ( 1U << 1U ), /*!< Heater mask */
mcm 1:ab60d7a79df0 176 CTRL_REG2_HEATER_HEATER_DISABLED = ( 0U << 1U ), /*!< Heater disabled [ Default ] */
mcm 1:ab60d7a79df0 177 CTRL_REG2_HEATER_HEATER_ENABLED = ( 1U << 1U ) /*!< Heater enabled */
mcm 1:ab60d7a79df0 178 } HTS221_ctrl_reg2_heater_t;
mcm 1:ab60d7a79df0 179
mcm 1:ab60d7a79df0 180
mcm 1:ab60d7a79df0 181 /* ONE_SHOT <0>
mcm 1:ab60d7a79df0 182 * NOTE: One-shot enable.
mcm 1:ab60d7a79df0 183 */
mcm 1:ab60d7a79df0 184 typedef enum {
mcm 1:ab60d7a79df0 185 CTRL_REG2_ONE_SHOT_MASK = ( 1U << 0U ), /*!< ONE_SHOT mask */
mcm 1:ab60d7a79df0 186 CTRL_REG2_ONE_SHOT_WAITING = ( 0U << 0U ), /*!< waiting for start of conversion [ Default ] */
mcm 1:ab60d7a79df0 187 CTRL_REG2_ONE_SHOT_START = ( 1U << 0U ) /*!< start for a new dataset */
mcm 1:ab60d7a79df0 188 } HTS221_ctrl_reg2_one_shot_t;
mcm 1:ab60d7a79df0 189
mcm 1:ab60d7a79df0 190
mcm 1:ab60d7a79df0 191
mcm 1:ab60d7a79df0 192 /**
mcm 1:ab60d7a79df0 193 * @brief CTRL_REG3 REGISTER
mcm 1:ab60d7a79df0 194 */
mcm 1:ab60d7a79df0 195 /* DRDY_H_L <7>
mcm 1:ab60d7a79df0 196 * NOTE: Data Ready output signal active high, low.
mcm 1:ab60d7a79df0 197 */
mcm 1:ab60d7a79df0 198 typedef enum {
mcm 1:ab60d7a79df0 199 CTRL_REG3_DRDY_H_L_MASK = ( 1U << 7U ), /*!< DRDY_H_L mask */
mcm 1:ab60d7a79df0 200 CTRL_REG3_DRDY_H_L_ACTIVE_HIGH = ( 0U << 7U ), /*!< active high [ Default ] */
mcm 1:ab60d7a79df0 201 CTRL_REG3_DRDY_H_L_ACTIVE_LOW = ( 1U << 7U ) /*!< active low */
mcm 1:ab60d7a79df0 202 } HTS221_ctrl_reg3_drdy_h_l_t;
mcm 1:ab60d7a79df0 203
mcm 1:ab60d7a79df0 204
mcm 1:ab60d7a79df0 205 /* PP_OD <6>
mcm 1:ab60d7a79df0 206 * NOTE: Push-pull / Open Drain selection on pin 3 (DRDY).
mcm 1:ab60d7a79df0 207 */
mcm 1:ab60d7a79df0 208 typedef enum {
mcm 1:ab60d7a79df0 209 CTRL_REG3_PP_OD_MASK = ( 1U << 6U ), /*!< PP_OD mask */
mcm 1:ab60d7a79df0 210 CTRL_REG3_PP_OD_PUSH_PULL = ( 0U << 6U ), /*!< push-pull [ Default ] */
mcm 1:ab60d7a79df0 211 CTRL_REG3_PP_OD_OPEN_DRAIN = ( 1U << 6U ) /*!< open drain */
mcm 1:ab60d7a79df0 212 } HTS221_ctrl_reg3_pp_od_t;
mcm 1:ab60d7a79df0 213
mcm 1:ab60d7a79df0 214
mcm 1:ab60d7a79df0 215 /* DRDY_EN <2>
mcm 1:ab60d7a79df0 216 * NOTE: Data Ready enable.
mcm 1:ab60d7a79df0 217 */
mcm 1:ab60d7a79df0 218 typedef enum {
mcm 1:ab60d7a79df0 219 CTRL_REG3_DRDY_EN_MASK = ( 1U << 2U ), /*!< DRDY_EN mask */
mcm 1:ab60d7a79df0 220 CTRL_REG3_DRDY_DATA_READY_DISABLED = ( 0U << 2U ), /*!< Data Ready disabled [ Default ] */
mcm 1:ab60d7a79df0 221 CTRL_REG3_DRDY_DATA_READY_ENABLED = ( 1U << 2U ) /*!< Data Ready signal available on pin 3 */
mcm 1:ab60d7a79df0 222 } HTS221_ctrl_reg3_drdy_en_t;
mcm 1:ab60d7a79df0 223
mcm 1:ab60d7a79df0 224
mcm 1:ab60d7a79df0 225
mcm 1:ab60d7a79df0 226 /**
mcm 1:ab60d7a79df0 227 * @brief STATUS_REG REGISTER
mcm 1:ab60d7a79df0 228 *
mcm 1:ab60d7a79df0 229 * NOTE: H_DA is set to 1 whenever a new humidity sample is available. H_DA is cleared anytime
mcm 1:ab60d7a79df0 230 * HUMIDITY_OUT_H (29h) register is read. T_DA is set to 1 whenever a new temperature sample is available. T_DA is cleared anytime TEMP_OUT_H (2Bh) register is read.
mcm 1:ab60d7a79df0 231 */
mcm 1:ab60d7a79df0 232 /* H_DA <1>
mcm 1:ab60d7a79df0 233 * NOTE: Humidity data available.
mcm 1:ab60d7a79df0 234 */
mcm 1:ab60d7a79df0 235 typedef enum {
mcm 1:ab60d7a79df0 236 STATUS_REGISTER_H_DA_MASK = ( 1U << 1U ), /*!< H_DA mask */
mcm 1:ab60d7a79df0 237 STATUS_REGISTER_H_DA_DATA_NOT_AVAILABLE = ( 0U << 1U ), /*!< new data for humidity is not yet available */
mcm 1:ab60d7a79df0 238 STATUS_REGISTER_H_DA_DATA_AVAILABLE = ( 1U << 1U ) /*!< new data for humidity is available */
mcm 1:ab60d7a79df0 239 } HTS221_status_reg_h_da_t;
mcm 1:ab60d7a79df0 240
mcm 1:ab60d7a79df0 241
mcm 1:ab60d7a79df0 242 /* T_DA <0>
mcm 1:ab60d7a79df0 243 * NOTE: Temperature data available.
mcm 1:ab60d7a79df0 244 */
mcm 1:ab60d7a79df0 245 typedef enum {
mcm 1:ab60d7a79df0 246 STATUS_REGISTER_T_DA_MASK = ( 1U << 0U ), /*!< T_DA mask */
mcm 1:ab60d7a79df0 247 STATUS_REGISTER_T_DA_DATA_NOT_AVAILABLE = ( 0U << 0U ), /*!< new data for temperature is not yet available */
mcm 1:ab60d7a79df0 248 STATUS_REGISTER_T_DA_DATA_AVAILABLE = ( 1U << 0U ) /*!< new data for temperature is available */
mcm 1:ab60d7a79df0 249 } HTS221_status_reg_t_da_t;
mcm 1:ab60d7a79df0 250
mcm 1:ab60d7a79df0 251
mcm 1:ab60d7a79df0 252
mcm 1:ab60d7a79df0 253 /**
mcm 1:ab60d7a79df0 254 * @brief HUMIDITY_OUT_L REGISTER
mcm 1:ab60d7a79df0 255 *
mcm 1:ab60d7a79df0 256 * NOTE: Relative humidity data (LSB)
mcm 1:ab60d7a79df0 257 . *
mcm 1:ab60d7a79df0 258 */
mcm 1:ab60d7a79df0 259 typedef enum {
mcm 1:ab60d7a79df0 260 HUMIDITY_OUT_L_MASK = 0xFF /*!< Humidity data LSB mask */
mcm 1:ab60d7a79df0 261 } HTS221_humidity_out_l_t;
mcm 1:ab60d7a79df0 262
mcm 1:ab60d7a79df0 263
mcm 1:ab60d7a79df0 264
mcm 1:ab60d7a79df0 265 /**
mcm 1:ab60d7a79df0 266 * @brief HUMIDITY_OUT_H REGISTER
mcm 1:ab60d7a79df0 267 *
mcm 1:ab60d7a79df0 268 * NOTE: Relative humidity data (LSB)
mcm 1:ab60d7a79df0 269 . *
mcm 1:ab60d7a79df0 270 */
mcm 1:ab60d7a79df0 271 typedef enum {
mcm 1:ab60d7a79df0 272 HUMIDITY_OUT_H_MASK = 0xFF /*!< Humidity data MSB mask */
mcm 1:ab60d7a79df0 273 } HTS221_humidity_out_h_t;
mcm 1:ab60d7a79df0 274
mcm 1:ab60d7a79df0 275
mcm 1:ab60d7a79df0 276
mcm 1:ab60d7a79df0 277 /**
mcm 1:ab60d7a79df0 278 * @brief TEMP_OUT_L REGISTER
mcm 1:ab60d7a79df0 279 *
mcm 1:ab60d7a79df0 280 * NOTE: Temperature data (LSB)
mcm 1:ab60d7a79df0 281 . *
mcm 1:ab60d7a79df0 282 */
mcm 1:ab60d7a79df0 283 typedef enum {
mcm 1:ab60d7a79df0 284 TEMP_OUT_L_MASK = 0xFF /*!< Temperature data LSB mask */
mcm 1:ab60d7a79df0 285 } HTS221_temp_out_l_t;
mcm 1:ab60d7a79df0 286
mcm 1:ab60d7a79df0 287
mcm 1:ab60d7a79df0 288
mcm 1:ab60d7a79df0 289 /**
mcm 1:ab60d7a79df0 290 * @brief TEMP_OUT_H REGISTER
mcm 1:ab60d7a79df0 291 *
mcm 1:ab60d7a79df0 292 * NOTE: Temperature data (MSB)
mcm 1:ab60d7a79df0 293 . *
mcm 1:ab60d7a79df0 294 */
mcm 1:ab60d7a79df0 295 typedef enum {
mcm 1:ab60d7a79df0 296 TEMP_OUT_H_MASK = 0xFF /*!< Temperature data MSB mask */
mcm 1:ab60d7a79df0 297 } HTS221_temp_out_h_t;
mcm 1:ab60d7a79df0 298
mcm 1:ab60d7a79df0 299
mcm 1:ab60d7a79df0 300
mcm 1:ab60d7a79df0 301
mcm 1:ab60d7a79df0 302
mcm 1:ab60d7a79df0 303 #ifndef HTS221_VECTOR_STRUCT_H
mcm 1:ab60d7a79df0 304 #define HTS221_VECTOR_STRUCT_H
mcm 1:ab60d7a79df0 305 typedef struct {
mcm 1:ab60d7a79df0 306 /* Output registers */
mcm 1:ab60d7a79df0 307 int16_t rawHumidity; /*!< Raw humidity */
mcm 1:ab60d7a79df0 308 int16_t rawTemperature; /*!< Raw temperature */
mcm 1:ab60d7a79df0 309
mcm 1:ab60d7a79df0 310 float humidity; /*!< Humidity value */
mcm 1:ab60d7a79df0 311 float temperature; /*!< Temperature value */
mcm 1:ab60d7a79df0 312
mcm 1:ab60d7a79df0 313 /* Calibration registers */
mcm 1:ab60d7a79df0 314 uint8_t h0_rH_x2; /*!< Calibration register */
mcm 1:ab60d7a79df0 315 uint8_t h1_rH_x2; /*!< Calibration register */
mcm 1:ab60d7a79df0 316 uint8_t t0_degC_x8; /*!< Calibration register */
mcm 1:ab60d7a79df0 317 uint8_t t1_degC_x8; /*!< Calibration register */
mcm 1:ab60d7a79df0 318 uint8_t t1_T0_msb; /*!< Calibration register */
mcm 1:ab60d7a79df0 319 int16_t h0_T0_OUT; /*!< Calibration register */
mcm 1:ab60d7a79df0 320 int16_t h1_T0_OUT; /*!< Calibration register */
mcm 1:ab60d7a79df0 321 int16_t t0_OUT; /*!< Calibration register */
mcm 1:ab60d7a79df0 322 int16_t t1_OUT; /*!< Calibration register */
mcm 1:ab60d7a79df0 323
mcm 1:ab60d7a79df0 324 int16_t t0_degC; /*!< Calibration result */
mcm 1:ab60d7a79df0 325 int16_t t1_degC; /*!< Calibration result */
mcm 1:ab60d7a79df0 326 int16_t h0_RH; /*!< Calibration result */
mcm 1:ab60d7a79df0 327 int16_t h1_RH; /*!< Calibration result */
mcm 1:ab60d7a79df0 328
mcm 1:ab60d7a79df0 329 /* Device identification */
mcm 1:ab60d7a79df0 330 uint8_t deviceID; /*!< Device ID */
mcm 1:ab60d7a79df0 331
mcm 1:ab60d7a79df0 332 /* Device configuration */
mcm 1:ab60d7a79df0 333 HTS221_av_config_avgt_t temperatureResolution; /*!< Temperature resolution */
mcm 1:ab60d7a79df0 334 HTS221_av_config_avgh_t humidityResolution; /*!< Humidity resolution */
mcm 1:ab60d7a79df0 335
mcm 1:ab60d7a79df0 336 HTS221_ctrl_reg1_bdu_t bdu; /*!< Block data update */
mcm 1:ab60d7a79df0 337 HTS221_ctrl_reg1_odr_t odr; /*!< Output data rate */
mcm 1:ab60d7a79df0 338 HTS221_ctrl_reg2_boot_t boot; /*!< Reboot mode content */
mcm 1:ab60d7a79df0 339 HTS221_ctrl_reg2_heater_t heater; /*!< Heater */
mcm 1:ab60d7a79df0 340 HTS221_ctrl_reg2_one_shot_t one_shot; /*!< One-Shot */
mcm 1:ab60d7a79df0 341
mcm 1:ab60d7a79df0 342 /* Device status */
mcm 1:ab60d7a79df0 343 HTS221_status_reg_h_da_t h_da; /*!< Humidity data available */
mcm 1:ab60d7a79df0 344 HTS221_status_reg_t_da_t t_da; /*!< Temperature data available */
mcm 1:ab60d7a79df0 345 } HTS221_data_t;
mcm 1:ab60d7a79df0 346 #endif
mcm 1:ab60d7a79df0 347
mcm 1:ab60d7a79df0 348
mcm 1:ab60d7a79df0 349 /**
mcm 1:ab60d7a79df0 350 * @brief INTERNAL CONSTANTS
mcm 1:ab60d7a79df0 351 */
mcm 1:ab60d7a79df0 352 typedef enum {
mcm 1:ab60d7a79df0 353 HTS221_SUCCESS = 0U,
mcm 1:ab60d7a79df0 354 HTS221_FAILURE = 1U,
mcm 1:ab60d7a79df0 355 I2C_SUCCESS = 0U /*!< I2C communication was fine */
mcm 1:ab60d7a79df0 356 } HTS221_status_t;
mcm 1:ab60d7a79df0 357
mcm 1:ab60d7a79df0 358
mcm 1:ab60d7a79df0 359
mcm 1:ab60d7a79df0 360
mcm 1:ab60d7a79df0 361 /** Create an HTS221 object connected to the specified I2C pins.
mcm 1:ab60d7a79df0 362 *
mcm 1:ab60d7a79df0 363 * @param sda I2C data pin
mcm 1:ab60d7a79df0 364 * @param scl I2C clock pin
mcm 1:ab60d7a79df0 365 * @param addr I2C slave address
mcm 1:ab60d7a79df0 366 * @param freq I2C frequency
mcm 1:ab60d7a79df0 367 */
mcm 1:ab60d7a79df0 368 HTS221 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq );
mcm 1:ab60d7a79df0 369
mcm 1:ab60d7a79df0 370 /** Delete HTS221 object.
mcm 1:ab60d7a79df0 371 */
mcm 1:ab60d7a79df0 372 ~HTS221();
mcm 1:ab60d7a79df0 373
mcm 1:ab60d7a79df0 374 /** It gets the device identification.
mcm 1:ab60d7a79df0 375 */
mcm 1:ab60d7a79df0 376 HTS221_status_t HTS221_GetDeviceID ( HTS221_data_t* myDeviceID );
mcm 1:ab60d7a79df0 377
mcm 1:ab60d7a79df0 378 /** It sets humidity and temperature resolution mode.
mcm 1:ab60d7a79df0 379 */
mcm 1:ab60d7a79df0 380 HTS221_status_t HTS221_SetResolution ( HTS221_data_t myTempHumResolution );
mcm 1:ab60d7a79df0 381
mcm 1:ab60d7a79df0 382 /** It gets humidity and temperature resolution mode.
mcm 1:ab60d7a79df0 383 */
mcm 1:ab60d7a79df0 384 HTS221_status_t HTS221_GetResolution ( HTS221_data_t* myTempHumResolution );
mcm 1:ab60d7a79df0 385
mcm 1:ab60d7a79df0 386 /** It sets power-down control mode.
mcm 1:ab60d7a79df0 387 */
mcm 1:ab60d7a79df0 388 HTS221_status_t HTS221_SetPowerDown ( HTS221_ctrl_reg1_pd_t myPowerMode );
mcm 1:ab60d7a79df0 389
mcm 1:ab60d7a79df0 390 /** It sets the block data update.
mcm 1:ab60d7a79df0 391 */
mcm 1:ab60d7a79df0 392 HTS221_status_t HTS221_SetBlockDataUpdate ( HTS221_data_t myBDU );
mcm 1:ab60d7a79df0 393
mcm 1:ab60d7a79df0 394 /** It gets the block data update.
mcm 1:ab60d7a79df0 395 */
mcm 1:ab60d7a79df0 396 HTS221_status_t HTS221_GetBlockDataUpdate ( HTS221_data_t* myBDU );
mcm 1:ab60d7a79df0 397
mcm 1:ab60d7a79df0 398 /** It sets the output data rate ( ODR ).
mcm 1:ab60d7a79df0 399 */
mcm 1:ab60d7a79df0 400 HTS221_status_t HTS221_SetOutputDataRate ( HTS221_data_t myODR );
mcm 1:ab60d7a79df0 401
mcm 1:ab60d7a79df0 402 /** It gets the output data rate ( ODR ).
mcm 1:ab60d7a79df0 403 */
mcm 1:ab60d7a79df0 404 HTS221_status_t HTS221_GetOutputDataRate ( HTS221_data_t* myODR );
mcm 1:ab60d7a79df0 405
mcm 1:ab60d7a79df0 406 /** It sets reboot memory content.
mcm 1:ab60d7a79df0 407 */
mcm 1:ab60d7a79df0 408 HTS221_status_t HTS221_SetBoot ( void );
mcm 1:ab60d7a79df0 409
mcm 1:ab60d7a79df0 410 /** It gets reboot memory content.
mcm 1:ab60d7a79df0 411 */
mcm 1:ab60d7a79df0 412 HTS221_status_t HTS221_GetBoot ( HTS221_data_t* myBOOT );
mcm 1:ab60d7a79df0 413
mcm 1:ab60d7a79df0 414 /** It sets heater mode: Enabled/Disabled.
mcm 1:ab60d7a79df0 415 */
mcm 1:ab60d7a79df0 416 HTS221_status_t HTS221_SetHeater ( HTS221_data_t myHeater );
mcm 1:ab60d7a79df0 417
mcm 1:ab60d7a79df0 418 /** It gets heater mode.
mcm 1:ab60d7a79df0 419 */
mcm 1:ab60d7a79df0 420 HTS221_status_t HTS221_GetHeater ( HTS221_data_t* myHeater );
mcm 1:ab60d7a79df0 421
mcm 1:ab60d7a79df0 422 /** It sets one-shot, new data set.
mcm 1:ab60d7a79df0 423 */
mcm 1:ab60d7a79df0 424 HTS221_status_t HTS221_SetOneShot ( void );
mcm 1:ab60d7a79df0 425
mcm 1:ab60d7a79df0 426 /** It gets one-shot flag.
mcm 1:ab60d7a79df0 427 */
mcm 1:ab60d7a79df0 428 HTS221_status_t HTS221_GetOneShot ( HTS221_data_t* myOneShot );
mcm 1:ab60d7a79df0 429
mcm 1:ab60d7a79df0 430 /** It sets data ready output signal active high/low.
mcm 1:ab60d7a79df0 431 */
mcm 1:ab60d7a79df0 432 HTS221_status_t HTS221_SetDataReadyOuput ( HTS221_ctrl_reg3_drdy_h_l_t myDRDY_H_L );
mcm 1:ab60d7a79df0 433
mcm 1:ab60d7a79df0 434 /** It sets Push-pull/Open Drain selection on pin 3 ( DRDY ).
mcm 1:ab60d7a79df0 435 */
mcm 1:ab60d7a79df0 436 HTS221_status_t HTS221_SetSelectionOnPin3 ( HTS221_ctrl_reg3_pp_od_t myDRDY );
mcm 1:ab60d7a79df0 437
mcm 1:ab60d7a79df0 438 /** It sets data ready enable.
mcm 1:ab60d7a79df0 439 */
mcm 1:ab60d7a79df0 440 HTS221_status_t HTS221_SetDataReadyEnable ( HTS221_ctrl_reg3_drdy_en_t myDRDY_EN );
mcm 1:ab60d7a79df0 441
mcm 1:ab60d7a79df0 442 /** It gets humidity data available flag.
mcm 1:ab60d7a79df0 443 */
mcm 1:ab60d7a79df0 444 HTS221_status_t HTS221_GetHumidityDataAvailable ( HTS221_data_t* myHumidityFlag );
mcm 1:ab60d7a79df0 445
mcm 1:ab60d7a79df0 446 /** It gets temperature data available flag.
mcm 1:ab60d7a79df0 447 */
mcm 1:ab60d7a79df0 448 HTS221_status_t HTS221_GetTemperatureDataAvailable ( HTS221_data_t* myTemperatureFlag );
mcm 1:ab60d7a79df0 449
mcm 1:ab60d7a79df0 450 /** It gets raw humidity.
mcm 1:ab60d7a79df0 451 */
mcm 1:ab60d7a79df0 452 HTS221_status_t HTS221_GetRawHumidity ( HTS221_data_t* myRawHumidity );
mcm 1:ab60d7a79df0 453
mcm 1:ab60d7a79df0 454 /** It gets raw temperature.
mcm 1:ab60d7a79df0 455 */
mcm 1:ab60d7a79df0 456 HTS221_status_t HTS221_GetRawTemperature ( HTS221_data_t* myRawTemperature );
mcm 1:ab60d7a79df0 457
mcm 1:ab60d7a79df0 458 /** It gets calibration coefficients.
mcm 1:ab60d7a79df0 459 */
mcm 1:ab60d7a79df0 460 HTS221_status_t HTS221_GetCalibrationCoefficients ( HTS221_data_t* myCoeff );
mcm 1:ab60d7a79df0 461
mcm 1:ab60d7a79df0 462 /** It gets the current temperature value in Celsius degrees.
mcm 1:ab60d7a79df0 463 */
mcm 1:ab60d7a79df0 464 HTS221_status_t HTS221_GetTemperature ( HTS221_data_t* myTemperature );
mcm 1:ab60d7a79df0 465
mcm 1:ab60d7a79df0 466 /** It gets the current humidity value.
mcm 1:ab60d7a79df0 467 */
mcm 1:ab60d7a79df0 468 HTS221_status_t HTS221_GetHumidity ( HTS221_data_t* myHumidity );
mcm 1:ab60d7a79df0 469
mcm 1:ab60d7a79df0 470
mcm 1:ab60d7a79df0 471
mcm 1:ab60d7a79df0 472 private:
mcm 1:ab60d7a79df0 473 I2C _i2c;
mcm 1:ab60d7a79df0 474 uint32_t _HTS221_Addr;
mcm 1:ab60d7a79df0 475 };
mcm 1:ab60d7a79df0 476
mcm 1:ab60d7a79df0 477 #endif