Committer:
mcm
Date:
Tue Sep 05 13:18:23 2017 +0000
Revision:
2:ad5e3555c7ef
Parent:
0:d15aa997f9c1
The library was completed and tested, it works as expected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 2:ad5e3555c7ef 1 /**
mcm 2:ad5e3555c7ef 2 * @brief HTU21D.c
mcm 2:ad5e3555c7ef 3 * @details Digital humidity sensor with temperature output.
mcm 2:ad5e3555c7ef 4 * Functions file.
mcm 2:ad5e3555c7ef 5 *
mcm 2:ad5e3555c7ef 6 *
mcm 2:ad5e3555c7ef 7 * @return NA
mcm 2:ad5e3555c7ef 8 *
mcm 2:ad5e3555c7ef 9 * @author Manuel Caballero
mcm 2:ad5e3555c7ef 10 * @date 4/September/2017
mcm 2:ad5e3555c7ef 11 * @version 4/September/2017 The ORIGIN
mcm 2:ad5e3555c7ef 12 * @pre NaN.
mcm 2:ad5e3555c7ef 13 * @warning NaN
mcm 2:ad5e3555c7ef 14 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
mcm 2:ad5e3555c7ef 15 */
mcm 2:ad5e3555c7ef 16
mcm 2:ad5e3555c7ef 17 #include "HTU21D.h"
mcm 2:ad5e3555c7ef 18
mcm 2:ad5e3555c7ef 19
mcm 2:ad5e3555c7ef 20 HTU21D::HTU21D ( PinName sda, PinName scl, uint32_t addr, uint32_t freq )
mcm 2:ad5e3555c7ef 21 : i2c ( sda, scl )
mcm 2:ad5e3555c7ef 22 , HTU21D_Addr ( addr )
mcm 2:ad5e3555c7ef 23 {
mcm 2:ad5e3555c7ef 24 i2c.frequency( freq );
mcm 2:ad5e3555c7ef 25 }
mcm 2:ad5e3555c7ef 26
mcm 2:ad5e3555c7ef 27
mcm 2:ad5e3555c7ef 28 HTU21D::~HTU21D()
mcm 2:ad5e3555c7ef 29 {
mcm 2:ad5e3555c7ef 30 }
mcm 2:ad5e3555c7ef 31
mcm 2:ad5e3555c7ef 32
mcm 2:ad5e3555c7ef 33
mcm 2:ad5e3555c7ef 34 /**
mcm 2:ad5e3555c7ef 35 * @brief HTU21D_Init ( HTU21D_master_mode_t , HTU21D_user_register_resolution_t , HTU21D_user_register_otp_t )
mcm 2:ad5e3555c7ef 36 *
mcm 2:ad5e3555c7ef 37 * @details It initializes the device.
mcm 2:ad5e3555c7ef 38 *
mcm 2:ad5e3555c7ef 39 * @param[in] myMode: Hold/No Hold master mode.
mcm 2:ad5e3555c7ef 40 * @param[in] myResolution: Resolution of the sensor.
mcm 2:ad5e3555c7ef 41 * @param[in] myHeater: Heater enabled or disabled.
mcm 2:ad5e3555c7ef 42 *
mcm 2:ad5e3555c7ef 43 * @param[out] NaN.
mcm 2:ad5e3555c7ef 44 *
mcm 2:ad5e3555c7ef 45 *
mcm 2:ad5e3555c7ef 46 * @return Status of HTU21D_Init.
mcm 2:ad5e3555c7ef 47 *
mcm 2:ad5e3555c7ef 48 *
mcm 2:ad5e3555c7ef 49 * @author Manuel Caballero
mcm 2:ad5e3555c7ef 50 * @date 4/September/2017
mcm 2:ad5e3555c7ef 51 * @version 4/September/2017 The ORIGIN
mcm 2:ad5e3555c7ef 52 * @pre NaN
mcm 2:ad5e3555c7ef 53 * @warning NaN.
mcm 2:ad5e3555c7ef 54 */
mcm 2:ad5e3555c7ef 55 HTU21D::HTU21D_status_t HTU21D::HTU21D_Init ( HTU21D_master_mode_t myMode, HTU21D_user_register_resolution_t myResolution, HTU21D_user_register_heater_t myHeater )
mcm 2:ad5e3555c7ef 56 {
mcm 2:ad5e3555c7ef 57 char cmd[] = { HTU21D_READ_REGISTER, 0 };
mcm 2:ad5e3555c7ef 58 uint32_t aux = 0;
mcm 2:ad5e3555c7ef 59
mcm 2:ad5e3555c7ef 60
mcm 2:ad5e3555c7ef 61 HTU21D_Mode = myMode;
mcm 2:ad5e3555c7ef 62 HTU21D_Resolution = myResolution;
mcm 2:ad5e3555c7ef 63
mcm 2:ad5e3555c7ef 64
mcm 2:ad5e3555c7ef 65 // Reserved bits must not be changed. Therefore, for any writing to user register, default values of reserved bits must be read first
mcm 2:ad5e3555c7ef 66 // Datasheet: User register p.13.
mcm 2:ad5e3555c7ef 67 aux = i2c.write ( HTU21D_Addr, &cmd[0], 1 );
mcm 2:ad5e3555c7ef 68 aux = i2c.read ( HTU21D_Addr, &cmd[0], 1 );
mcm 2:ad5e3555c7ef 69
mcm 2:ad5e3555c7ef 70
mcm 2:ad5e3555c7ef 71 cmd[0] &= 0x38; // Mask reserved bits
mcm 2:ad5e3555c7ef 72
mcm 2:ad5e3555c7ef 73 // On-chip heater
mcm 2:ad5e3555c7ef 74 if ( myHeater == HEATER_ENABLED )
mcm 2:ad5e3555c7ef 75 cmd[0] |= 0x04;
mcm 2:ad5e3555c7ef 76
mcm 2:ad5e3555c7ef 77 // Resolution
mcm 2:ad5e3555c7ef 78 switch ( HTU21D_Resolution ) {
mcm 2:ad5e3555c7ef 79 default:
mcm 2:ad5e3555c7ef 80 case RESOLUTION_12RH_14TEMP:
mcm 2:ad5e3555c7ef 81 cmd[0] &= 0x7E;
mcm 2:ad5e3555c7ef 82 break;
mcm 2:ad5e3555c7ef 83
mcm 2:ad5e3555c7ef 84 case RESOLUTION_8RH_12TEMP:
mcm 2:ad5e3555c7ef 85 cmd[0] |= 0x01;
mcm 2:ad5e3555c7ef 86 break;
mcm 2:ad5e3555c7ef 87
mcm 2:ad5e3555c7ef 88 case RESOLUTION_10RH_13TEMP:
mcm 2:ad5e3555c7ef 89 cmd[0] |= 0x80;
mcm 2:ad5e3555c7ef 90 break;
mcm 2:ad5e3555c7ef 91
mcm 2:ad5e3555c7ef 92 case RESOLUTION_11RH_11TEMP:
mcm 2:ad5e3555c7ef 93 cmd[0] |= 0x81;
mcm 2:ad5e3555c7ef 94 break;
mcm 2:ad5e3555c7ef 95 }
mcm 2:ad5e3555c7ef 96
mcm 2:ad5e3555c7ef 97
mcm 2:ad5e3555c7ef 98 cmd[1] = ( cmd[0] | 0x02 ); // OTP reload disabled
mcm 2:ad5e3555c7ef 99 cmd[0] = HTU21D_WRITE_REGISTER;
mcm 2:ad5e3555c7ef 100
mcm 2:ad5e3555c7ef 101 aux = i2c.write ( HTU21D_Addr, &cmd[0], 2 );
mcm 2:ad5e3555c7ef 102
mcm 2:ad5e3555c7ef 103
mcm 2:ad5e3555c7ef 104
mcm 2:ad5e3555c7ef 105 if ( aux == I2C_SUCCESS )
mcm 2:ad5e3555c7ef 106 return HTU21D_SUCCESS;
mcm 2:ad5e3555c7ef 107 else
mcm 2:ad5e3555c7ef 108 return HTU21D_FAILURE;
mcm 2:ad5e3555c7ef 109 }
mcm 2:ad5e3555c7ef 110
mcm 2:ad5e3555c7ef 111
mcm 2:ad5e3555c7ef 112
mcm 2:ad5e3555c7ef 113 /**
mcm 2:ad5e3555c7ef 114 * @brief HTU21D_SoftReset ( void )
mcm 2:ad5e3555c7ef 115 * @details Rebooting the HTU21D sensor switching the power off and on again.
mcm 2:ad5e3555c7ef 116 *
mcm 2:ad5e3555c7ef 117 * @param[in] NaN.
mcm 2:ad5e3555c7ef 118 *
mcm 2:ad5e3555c7ef 119 * @param[out] Status of HTU21D_SoftReset.
mcm 2:ad5e3555c7ef 120 *
mcm 2:ad5e3555c7ef 121 *
mcm 2:ad5e3555c7ef 122 * @return NA
mcm 2:ad5e3555c7ef 123 *
mcm 2:ad5e3555c7ef 124 * @author Manuel Caballero
mcm 2:ad5e3555c7ef 125 * @date 5/September/2017
mcm 2:ad5e3555c7ef 126 * @version 5/September/2017 The ORIGIN
mcm 2:ad5e3555c7ef 127 * @pre NaN
mcm 2:ad5e3555c7ef 128 * @warning The soft reset takes less than 15ms.
mcm 2:ad5e3555c7ef 129 */
mcm 2:ad5e3555c7ef 130 HTU21D::HTU21D_status_t HTU21D::HTU21D_SoftReset ( void )
mcm 2:ad5e3555c7ef 131 {
mcm 2:ad5e3555c7ef 132 char cmd = HTU21D_SOFT_RESET;
mcm 2:ad5e3555c7ef 133 uint32_t aux = 0;
mcm 2:ad5e3555c7ef 134
mcm 2:ad5e3555c7ef 135
mcm 2:ad5e3555c7ef 136 aux = i2c.write ( HTU21D_Addr, &cmd, 1 );
mcm 2:ad5e3555c7ef 137 wait ( 0.015 );
mcm 2:ad5e3555c7ef 138
mcm 2:ad5e3555c7ef 139
mcm 2:ad5e3555c7ef 140 if ( aux == HTU21D_SUCCESS )
mcm 2:ad5e3555c7ef 141 return HTU21D_SUCCESS;
mcm 2:ad5e3555c7ef 142 else
mcm 2:ad5e3555c7ef 143 return HTU21D_FAILURE;
mcm 2:ad5e3555c7ef 144 }
mcm 2:ad5e3555c7ef 145
mcm 2:ad5e3555c7ef 146
mcm 2:ad5e3555c7ef 147
mcm 2:ad5e3555c7ef 148 /**
mcm 2:ad5e3555c7ef 149 * @brief HTU21D_TriggerTemperature ( void )
mcm 2:ad5e3555c7ef 150 * @details Trigger a new temperature measurement.
mcm 2:ad5e3555c7ef 151 *
mcm 2:ad5e3555c7ef 152 * @param[in] NaN.
mcm 2:ad5e3555c7ef 153 *
mcm 2:ad5e3555c7ef 154 * @param[out] Status of HTU21D_TriggerTemperature.
mcm 2:ad5e3555c7ef 155 *
mcm 2:ad5e3555c7ef 156 *
mcm 2:ad5e3555c7ef 157 * @return NA
mcm 2:ad5e3555c7ef 158 *
mcm 2:ad5e3555c7ef 159 * @author Manuel Caballero
mcm 2:ad5e3555c7ef 160 * @date 5/September/2017
mcm 2:ad5e3555c7ef 161 * @version 5/September/2017 The ORIGIN
mcm 2:ad5e3555c7ef 162 * @pre NaN
mcm 2:ad5e3555c7ef 163 * @warning The measuring time depends on the chosen resolution.
mcm 2:ad5e3555c7ef 164 */
mcm 2:ad5e3555c7ef 165 HTU21D::HTU21D_status_t HTU21D::HTU21D_TriggerTemperature ( void )
mcm 2:ad5e3555c7ef 166 {
mcm 2:ad5e3555c7ef 167 char cmd = 0;
mcm 2:ad5e3555c7ef 168 uint32_t aux = 0;
mcm 2:ad5e3555c7ef 169 float myDelay = 0;
mcm 2:ad5e3555c7ef 170
mcm 2:ad5e3555c7ef 171
mcm 2:ad5e3555c7ef 172 // Check if the event is by Hold Master Mode
mcm 2:ad5e3555c7ef 173 if ( HTU21D_Mode == MODE_HOLD_MASTER )
mcm 2:ad5e3555c7ef 174 cmd = HTU21D_TRIGGER_TEMPERATURE_MEASUREMENT_HOLD_MASTER;
mcm 2:ad5e3555c7ef 175 else
mcm 2:ad5e3555c7ef 176 cmd = HTU21D_TRIGGER_TEMPERATURE_MEASUREMENT_NO_HOLD_MASTER;
mcm 2:ad5e3555c7ef 177
mcm 2:ad5e3555c7ef 178
mcm 2:ad5e3555c7ef 179 aux = i2c.write ( HTU21D_Addr, &cmd, 1 );
mcm 2:ad5e3555c7ef 180
mcm 2:ad5e3555c7ef 181 // Measuring time
mcm 2:ad5e3555c7ef 182 switch ( HTU21D_Resolution ){
mcm 2:ad5e3555c7ef 183 default:
mcm 2:ad5e3555c7ef 184 case RESOLUTION_12RH_14TEMP:
mcm 2:ad5e3555c7ef 185 myDelay = 0.05;
mcm 2:ad5e3555c7ef 186 break;
mcm 2:ad5e3555c7ef 187
mcm 2:ad5e3555c7ef 188 case RESOLUTION_8RH_12TEMP:
mcm 2:ad5e3555c7ef 189 myDelay = 0.013;
mcm 2:ad5e3555c7ef 190 break;
mcm 2:ad5e3555c7ef 191
mcm 2:ad5e3555c7ef 192 case RESOLUTION_10RH_13TEMP:
mcm 2:ad5e3555c7ef 193 myDelay = 0.025;
mcm 2:ad5e3555c7ef 194 break;
mcm 2:ad5e3555c7ef 195
mcm 2:ad5e3555c7ef 196 case RESOLUTION_11RH_11TEMP:
mcm 2:ad5e3555c7ef 197 myDelay = 0.007;
mcm 2:ad5e3555c7ef 198 break;
mcm 2:ad5e3555c7ef 199 }
mcm 2:ad5e3555c7ef 200
mcm 2:ad5e3555c7ef 201 wait ( myDelay );
mcm 2:ad5e3555c7ef 202
mcm 2:ad5e3555c7ef 203
mcm 2:ad5e3555c7ef 204 if ( aux == HTU21D_SUCCESS )
mcm 2:ad5e3555c7ef 205 return HTU21D_SUCCESS;
mcm 2:ad5e3555c7ef 206 else
mcm 2:ad5e3555c7ef 207 return HTU21D_FAILURE;
mcm 2:ad5e3555c7ef 208 }
mcm 2:ad5e3555c7ef 209
mcm 2:ad5e3555c7ef 210
mcm 2:ad5e3555c7ef 211
mcm 2:ad5e3555c7ef 212 /**
mcm 2:ad5e3555c7ef 213 * @brief HTU21D_ReadTemperature ( Vector_temperature_f* )
mcm 2:ad5e3555c7ef 214 * @details Read a new temperature measurement.
mcm 2:ad5e3555c7ef 215 *
mcm 2:ad5e3555c7ef 216 * @param[in] mytemperature: Variable to store the temperature.
mcm 2:ad5e3555c7ef 217 *
mcm 2:ad5e3555c7ef 218 * @param[out] Status of HTU21D_ReadTemperature.
mcm 2:ad5e3555c7ef 219 *
mcm 2:ad5e3555c7ef 220 *
mcm 2:ad5e3555c7ef 221 * @return NA
mcm 2:ad5e3555c7ef 222 *
mcm 2:ad5e3555c7ef 223 * @author Manuel Caballero
mcm 2:ad5e3555c7ef 224 * @date 5/September/2017
mcm 2:ad5e3555c7ef 225 * @version 5/September/2017 The ORIGIN
mcm 2:ad5e3555c7ef 226 * @pre NaN
mcm 2:ad5e3555c7ef 227 * @warning HTU21D_TriggerTemperature MUST be called before.
mcm 2:ad5e3555c7ef 228 */
mcm 2:ad5e3555c7ef 229 HTU21D::HTU21D_status_t HTU21D::HTU21D_ReadTemperature ( Vector_temperature_f* mytemperature )
mcm 2:ad5e3555c7ef 230 {
mcm 2:ad5e3555c7ef 231 char aux = 0;
mcm 2:ad5e3555c7ef 232 char myRawTemp[] = { 0, 0, 0};
mcm 2:ad5e3555c7ef 233
mcm 2:ad5e3555c7ef 234
mcm 2:ad5e3555c7ef 235 aux = i2c.read ( HTU21D_Addr, &myRawTemp[0], 3 );
mcm 2:ad5e3555c7ef 236
mcm 2:ad5e3555c7ef 237
mcm 2:ad5e3555c7ef 238 mytemperature->Temperature = ( myRawTemp[0] << 8 ) | myRawTemp[1];
mcm 2:ad5e3555c7ef 239 mytemperature->Temperature /= 65536.0;
mcm 2:ad5e3555c7ef 240 mytemperature->Temperature *= 175.72;
mcm 2:ad5e3555c7ef 241 mytemperature->Temperature -= 46.85;
mcm 2:ad5e3555c7ef 242
mcm 2:ad5e3555c7ef 243
mcm 2:ad5e3555c7ef 244
mcm 2:ad5e3555c7ef 245 if ( aux == HTU21D_SUCCESS )
mcm 2:ad5e3555c7ef 246 return HTU21D_SUCCESS;
mcm 2:ad5e3555c7ef 247 else
mcm 2:ad5e3555c7ef 248 return HTU21D_FAILURE;
mcm 2:ad5e3555c7ef 249 }
mcm 2:ad5e3555c7ef 250
mcm 2:ad5e3555c7ef 251
mcm 2:ad5e3555c7ef 252
mcm 2:ad5e3555c7ef 253 /**
mcm 2:ad5e3555c7ef 254 * @brief HTU21D_ReadRawTemperature ( Vector_raw_temperature_t* )
mcm 2:ad5e3555c7ef 255 * @details Read a new raw temperature measurement.
mcm 2:ad5e3555c7ef 256 *
mcm 2:ad5e3555c7ef 257 * @param[in] myRawtemperature: Variable to store the temperature.
mcm 2:ad5e3555c7ef 258 *
mcm 2:ad5e3555c7ef 259 * @param[out] Status of HTU21D_ReadTemperature.
mcm 2:ad5e3555c7ef 260 *
mcm 2:ad5e3555c7ef 261 *
mcm 2:ad5e3555c7ef 262 * @return NA
mcm 2:ad5e3555c7ef 263 *
mcm 2:ad5e3555c7ef 264 * @author Manuel Caballero
mcm 2:ad5e3555c7ef 265 * @date 5/September/2017
mcm 2:ad5e3555c7ef 266 * @version 5/September/2017 The ORIGIN
mcm 2:ad5e3555c7ef 267 * @pre NaN
mcm 2:ad5e3555c7ef 268 * @warning HTU21D_TriggerTemperature MUST be called before.
mcm 2:ad5e3555c7ef 269 */
mcm 2:ad5e3555c7ef 270 HTU21D::HTU21D_status_t HTU21D::HTU21D_ReadRawTemperature ( Vector_raw_temperature_t* myRawtemperature )
mcm 2:ad5e3555c7ef 271 {
mcm 2:ad5e3555c7ef 272 uint32_t aux = 0;
mcm 2:ad5e3555c7ef 273
mcm 2:ad5e3555c7ef 274
mcm 2:ad5e3555c7ef 275 aux = i2c.read ( HTU21D_Addr, &myRawtemperature->RawTemperature[0], 3 );
mcm 2:ad5e3555c7ef 276
mcm 2:ad5e3555c7ef 277
mcm 2:ad5e3555c7ef 278 if ( aux == HTU21D_SUCCESS )
mcm 2:ad5e3555c7ef 279 return HTU21D_SUCCESS;
mcm 2:ad5e3555c7ef 280 else
mcm 2:ad5e3555c7ef 281 return HTU21D_FAILURE;
mcm 2:ad5e3555c7ef 282 }
mcm 2:ad5e3555c7ef 283
mcm 2:ad5e3555c7ef 284
mcm 2:ad5e3555c7ef 285 /**
mcm 2:ad5e3555c7ef 286 * @brief HTU21D_TriggerHumidity ( void )
mcm 2:ad5e3555c7ef 287 * @details Trigger a new humidity measurement.
mcm 2:ad5e3555c7ef 288 *
mcm 2:ad5e3555c7ef 289 * @param[in] NaN.
mcm 2:ad5e3555c7ef 290 *
mcm 2:ad5e3555c7ef 291 * @param[out] Status of HTU21D_TriggerHumidity.
mcm 2:ad5e3555c7ef 292 *
mcm 2:ad5e3555c7ef 293 *
mcm 2:ad5e3555c7ef 294 * @return NA
mcm 2:ad5e3555c7ef 295 *
mcm 2:ad5e3555c7ef 296 * @author Manuel Caballero
mcm 2:ad5e3555c7ef 297 * @date 5/September/2017
mcm 2:ad5e3555c7ef 298 * @version 5/September/2017 The ORIGIN
mcm 2:ad5e3555c7ef 299 * @pre NaN
mcm 2:ad5e3555c7ef 300 * @warning The measuring time depends on the chosen resolution.
mcm 2:ad5e3555c7ef 301 */
mcm 2:ad5e3555c7ef 302 HTU21D::HTU21D_status_t HTU21D::HTU21D_TriggerHumidity ( void )
mcm 2:ad5e3555c7ef 303 {
mcm 2:ad5e3555c7ef 304 char cmd = 0;
mcm 2:ad5e3555c7ef 305 uint32_t aux = 0;
mcm 2:ad5e3555c7ef 306 float myDelay = 0;
mcm 2:ad5e3555c7ef 307
mcm 2:ad5e3555c7ef 308
mcm 2:ad5e3555c7ef 309 // Check if the event is by Hold Master Mode
mcm 2:ad5e3555c7ef 310 if ( HTU21D_Mode == MODE_HOLD_MASTER )
mcm 2:ad5e3555c7ef 311 cmd = HTU21D_TRIGGER_HUMIDITY_MEASUREMENT_HOLD_MASTER;
mcm 2:ad5e3555c7ef 312 else
mcm 2:ad5e3555c7ef 313 cmd = HTU21D_TRIGGER_HUMIDITY_MEASUREMENT_NO_HOLD_MASTER;
mcm 2:ad5e3555c7ef 314
mcm 2:ad5e3555c7ef 315
mcm 2:ad5e3555c7ef 316 aux = i2c.write ( HTU21D_Addr, &cmd, 1 );
mcm 2:ad5e3555c7ef 317
mcm 2:ad5e3555c7ef 318 // Measuring time
mcm 2:ad5e3555c7ef 319 switch ( HTU21D_Resolution ){
mcm 2:ad5e3555c7ef 320 default:
mcm 2:ad5e3555c7ef 321 case RESOLUTION_12RH_14TEMP:
mcm 2:ad5e3555c7ef 322 myDelay = 0.05;
mcm 2:ad5e3555c7ef 323 break;
mcm 2:ad5e3555c7ef 324
mcm 2:ad5e3555c7ef 325 case RESOLUTION_8RH_12TEMP:
mcm 2:ad5e3555c7ef 326 myDelay = 0.013;
mcm 2:ad5e3555c7ef 327 break;
mcm 2:ad5e3555c7ef 328
mcm 2:ad5e3555c7ef 329 case RESOLUTION_10RH_13TEMP:
mcm 2:ad5e3555c7ef 330 myDelay = 0.025;
mcm 2:ad5e3555c7ef 331 break;
mcm 2:ad5e3555c7ef 332
mcm 2:ad5e3555c7ef 333 case RESOLUTION_11RH_11TEMP:
mcm 2:ad5e3555c7ef 334 myDelay = 0.007;
mcm 2:ad5e3555c7ef 335 break;
mcm 2:ad5e3555c7ef 336 }
mcm 2:ad5e3555c7ef 337
mcm 2:ad5e3555c7ef 338 wait ( myDelay );
mcm 2:ad5e3555c7ef 339
mcm 2:ad5e3555c7ef 340
mcm 2:ad5e3555c7ef 341 if ( aux == HTU21D_SUCCESS )
mcm 2:ad5e3555c7ef 342 return HTU21D_SUCCESS;
mcm 2:ad5e3555c7ef 343 else
mcm 2:ad5e3555c7ef 344 return HTU21D_FAILURE;
mcm 2:ad5e3555c7ef 345 }
mcm 2:ad5e3555c7ef 346
mcm 2:ad5e3555c7ef 347
mcm 2:ad5e3555c7ef 348
mcm 2:ad5e3555c7ef 349 /**
mcm 2:ad5e3555c7ef 350 * @brief HTU21D_ReadHumidity ( Vector_humidity_f* )
mcm 2:ad5e3555c7ef 351 * @details Read a new humidity measurement.
mcm 2:ad5e3555c7ef 352 *
mcm 2:ad5e3555c7ef 353 * @param[in] myhumidity: Variable to store the humidity.
mcm 2:ad5e3555c7ef 354 *
mcm 2:ad5e3555c7ef 355 * @param[out] Status of HTU21D_ReadHumidity.
mcm 2:ad5e3555c7ef 356 *
mcm 2:ad5e3555c7ef 357 *
mcm 2:ad5e3555c7ef 358 * @return NA
mcm 2:ad5e3555c7ef 359 *
mcm 2:ad5e3555c7ef 360 * @author Manuel Caballero
mcm 2:ad5e3555c7ef 361 * @date 5/September/2017
mcm 2:ad5e3555c7ef 362 * @version 5/September/2017 The ORIGIN
mcm 2:ad5e3555c7ef 363 * @pre NaN
mcm 2:ad5e3555c7ef 364 * @warning HTU21D_TriggerHumidity MUST be called before.
mcm 2:ad5e3555c7ef 365 */
mcm 2:ad5e3555c7ef 366 HTU21D::HTU21D_status_t HTU21D::HTU21D_ReadHumidity ( Vector_humidity_f* myhumidity )
mcm 2:ad5e3555c7ef 367 {
mcm 2:ad5e3555c7ef 368 uint32_t aux = 0;
mcm 2:ad5e3555c7ef 369 char myRawRH[] = { 0, 0, 0};
mcm 2:ad5e3555c7ef 370
mcm 2:ad5e3555c7ef 371
mcm 2:ad5e3555c7ef 372 aux = i2c.read ( HTU21D_Addr, &myRawRH[0], 3 );
mcm 2:ad5e3555c7ef 373
mcm 2:ad5e3555c7ef 374
mcm 2:ad5e3555c7ef 375 myhumidity->Humidity = ( myRawRH[0] << 8 ) | myRawRH[1];
mcm 2:ad5e3555c7ef 376 myhumidity->Humidity /= 65536.0;
mcm 2:ad5e3555c7ef 377 myhumidity->Humidity *= 125.0;
mcm 2:ad5e3555c7ef 378 myhumidity->Humidity -= 6.0;
mcm 2:ad5e3555c7ef 379
mcm 2:ad5e3555c7ef 380
mcm 2:ad5e3555c7ef 381
mcm 2:ad5e3555c7ef 382 if ( aux == HTU21D_SUCCESS )
mcm 2:ad5e3555c7ef 383 return HTU21D_SUCCESS;
mcm 2:ad5e3555c7ef 384 else
mcm 2:ad5e3555c7ef 385 return HTU21D_FAILURE;
mcm 2:ad5e3555c7ef 386 }
mcm 2:ad5e3555c7ef 387
mcm 2:ad5e3555c7ef 388
mcm 2:ad5e3555c7ef 389
mcm 2:ad5e3555c7ef 390 /**
mcm 2:ad5e3555c7ef 391 * @brief HTU21D_ReadRawHumidity ( Vector_raw_humidity_t* )
mcm 2:ad5e3555c7ef 392 * @details Read a new raw humidity measurement.
mcm 2:ad5e3555c7ef 393 *
mcm 2:ad5e3555c7ef 394 * @param[in] myRawhumidity: Variable to store the raw humidity.
mcm 2:ad5e3555c7ef 395 *
mcm 2:ad5e3555c7ef 396 * @param[out] Status of HTU21D_ReadHumidity.
mcm 2:ad5e3555c7ef 397 *
mcm 2:ad5e3555c7ef 398 *
mcm 2:ad5e3555c7ef 399 * @return NA
mcm 2:ad5e3555c7ef 400 *
mcm 2:ad5e3555c7ef 401 * @author Manuel Caballero
mcm 2:ad5e3555c7ef 402 * @date 5/September/2017
mcm 2:ad5e3555c7ef 403 * @version 5/September/2017 The ORIGIN
mcm 2:ad5e3555c7ef 404 * @pre NaN
mcm 2:ad5e3555c7ef 405 * @warning The measuring time depends on the chosen resolution.
mcm 2:ad5e3555c7ef 406 * @warning HTU21D_TriggerHumidity MUST be called before.
mcm 2:ad5e3555c7ef 407 */
mcm 2:ad5e3555c7ef 408 HTU21D::HTU21D_status_t HTU21D::HTU21D_ReadRawHumidity ( Vector_raw_humidity_t* myRawhumidity )
mcm 2:ad5e3555c7ef 409 {
mcm 2:ad5e3555c7ef 410 uint32_t aux = 0;
mcm 2:ad5e3555c7ef 411
mcm 2:ad5e3555c7ef 412
mcm 2:ad5e3555c7ef 413 aux = i2c.read ( HTU21D_Addr, &myRawhumidity->RawHumidity[0], 3 );
mcm 2:ad5e3555c7ef 414
mcm 2:ad5e3555c7ef 415
mcm 2:ad5e3555c7ef 416
mcm 2:ad5e3555c7ef 417 if ( aux == HTU21D_SUCCESS )
mcm 2:ad5e3555c7ef 418 return HTU21D_SUCCESS;
mcm 2:ad5e3555c7ef 419 else
mcm 2:ad5e3555c7ef 420 return HTU21D_FAILURE;
mcm 2:ad5e3555c7ef 421 }
mcm 2:ad5e3555c7ef 422
mcm 2:ad5e3555c7ef 423
mcm 2:ad5e3555c7ef 424
mcm 2:ad5e3555c7ef 425 /**
mcm 2:ad5e3555c7ef 426 * @brief HTU21D_BatteryStatus ( HTU21D_user_register_status_t* )
mcm 2:ad5e3555c7ef 427 * @details Read the user register to check the battery status.
mcm 2:ad5e3555c7ef 428 *
mcm 2:ad5e3555c7ef 429 * @param[in] battStatus: Variable to store the battery status.
mcm 2:ad5e3555c7ef 430 *
mcm 2:ad5e3555c7ef 431 * @param[out] Status of HTU21D_BatteryStatus.
mcm 2:ad5e3555c7ef 432 *
mcm 2:ad5e3555c7ef 433 *
mcm 2:ad5e3555c7ef 434 * @return NA
mcm 2:ad5e3555c7ef 435 *
mcm 2:ad5e3555c7ef 436 * @author Manuel Caballero
mcm 2:ad5e3555c7ef 437 * @date 5/September/2017
mcm 2:ad5e3555c7ef 438 * @version 5/September/2017 The ORIGIN
mcm 2:ad5e3555c7ef 439 * @pre NaN
mcm 2:ad5e3555c7ef 440 * @warning NaN.
mcm 2:ad5e3555c7ef 441 */
mcm 2:ad5e3555c7ef 442 HTU21D::HTU21D_status_t HTU21D::HTU21D_BatteryStatus ( HTU21D_user_register_status_t* battStatus )
mcm 2:ad5e3555c7ef 443 {
mcm 2:ad5e3555c7ef 444 char cmd = HTU21D_READ_REGISTER;
mcm 2:ad5e3555c7ef 445 uint32_t aux = 0;
mcm 2:ad5e3555c7ef 446
mcm 2:ad5e3555c7ef 447
mcm 2:ad5e3555c7ef 448 aux = i2c.write ( HTU21D_Addr, &cmd, 1 );
mcm 2:ad5e3555c7ef 449 aux = i2c.read ( HTU21D_Addr, &cmd, 1 );
mcm 2:ad5e3555c7ef 450
mcm 2:ad5e3555c7ef 451
mcm 2:ad5e3555c7ef 452 cmd &= 0x40; // Mask 'Status: End of Batter' bit
mcm 2:ad5e3555c7ef 453
mcm 2:ad5e3555c7ef 454 if ( cmd == 0x40 )
mcm 2:ad5e3555c7ef 455 *battStatus = STATUS_END_BATTERY_LOW_2V25;
mcm 2:ad5e3555c7ef 456 else
mcm 2:ad5e3555c7ef 457 *battStatus = STATUS_END_BATTERY_HIGH_2V25;
mcm 2:ad5e3555c7ef 458
mcm 2:ad5e3555c7ef 459
mcm 2:ad5e3555c7ef 460 if ( aux == HTU21D_SUCCESS )
mcm 2:ad5e3555c7ef 461 return HTU21D_SUCCESS;
mcm 2:ad5e3555c7ef 462 else
mcm 2:ad5e3555c7ef 463 return HTU21D_FAILURE;
mcm 2:ad5e3555c7ef 464 }