Digital Humidity Sensor SHT2x (RH/T)

Committer:
mcm
Date:
Tue Sep 04 11:07:22 2018 +0000
Revision:
2:5893455b8c6c
Parent:
1:9f1fcd1e4c9c
This driver was completed and tested ( NUCLEO-L152RE ), it works as expected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 1:9f1fcd1e4c9c 1 /**
mcm 2:5893455b8c6c 2 * @brief SHT2X.cpp
mcm 1:9f1fcd1e4c9c 3 * @details Humidity and Temperature Sensor IC.
mcm 1:9f1fcd1e4c9c 4 * Functions file.
mcm 1:9f1fcd1e4c9c 5 *
mcm 1:9f1fcd1e4c9c 6 *
mcm 1:9f1fcd1e4c9c 7 * @return N/A
mcm 1:9f1fcd1e4c9c 8 *
mcm 1:9f1fcd1e4c9c 9 * @author Manuel Caballero
mcm 1:9f1fcd1e4c9c 10 * @date 3/September/2018
mcm 1:9f1fcd1e4c9c 11 * @version 3/September/2018 The ORIGIN
mcm 1:9f1fcd1e4c9c 12 * @pre N/A
mcm 1:9f1fcd1e4c9c 13 * @warning N/A
mcm 1:9f1fcd1e4c9c 14 * @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ).
mcm 1:9f1fcd1e4c9c 15 */
mcm 1:9f1fcd1e4c9c 16
mcm 1:9f1fcd1e4c9c 17 #include "SHT2X.h"
mcm 1:9f1fcd1e4c9c 18
mcm 1:9f1fcd1e4c9c 19
mcm 1:9f1fcd1e4c9c 20 SHT2X::SHT2X ( PinName sda, PinName scl, uint32_t addr, uint32_t freq )
mcm 1:9f1fcd1e4c9c 21 : _i2c ( sda, scl )
mcm 1:9f1fcd1e4c9c 22 , _SHT2X_Addr ( addr )
mcm 1:9f1fcd1e4c9c 23 {
mcm 1:9f1fcd1e4c9c 24 _i2c.frequency( freq );
mcm 1:9f1fcd1e4c9c 25 }
mcm 1:9f1fcd1e4c9c 26
mcm 1:9f1fcd1e4c9c 27
mcm 1:9f1fcd1e4c9c 28 SHT2X::~SHT2X()
mcm 1:9f1fcd1e4c9c 29 {
mcm 1:9f1fcd1e4c9c 30 }
mcm 1:9f1fcd1e4c9c 31
mcm 1:9f1fcd1e4c9c 32
mcm 1:9f1fcd1e4c9c 33
mcm 1:9f1fcd1e4c9c 34 /**
mcm 1:9f1fcd1e4c9c 35 * @brief SHT2X_Conf ( SHT2X_measurement_resolution_t , SHT2X_on_chip_heater_t )
mcm 1:9f1fcd1e4c9c 36 * @details It configures the SHT2X device.
mcm 1:9f1fcd1e4c9c 37 *
mcm 1:9f1fcd1e4c9c 38 * @param[in] myResolution: SHT2X Resolution.
mcm 1:9f1fcd1e4c9c 39 * @param[in] myHeater: SHT2X Heater EN/Abled or Disabled.
mcm 1:9f1fcd1e4c9c 40 *
mcm 1:9f1fcd1e4c9c 41 * @param[out] N/A
mcm 1:9f1fcd1e4c9c 42 *
mcm 1:9f1fcd1e4c9c 43 *
mcm 1:9f1fcd1e4c9c 44 * @return Status of SHT2X_Init.
mcm 1:9f1fcd1e4c9c 45 *
mcm 1:9f1fcd1e4c9c 46 * @author Manuel Caballero
mcm 1:9f1fcd1e4c9c 47 * @date 3/September/2018
mcm 1:9f1fcd1e4c9c 48 * @version 3/September/2018 The ORIGIN
mcm 1:9f1fcd1e4c9c 49 * @pre N/A
mcm 1:9f1fcd1e4c9c 50 * @warning N/A.
mcm 1:9f1fcd1e4c9c 51 */
mcm 1:9f1fcd1e4c9c 52 SHT2X::SHT2X_status_t SHT2X::SHT2X_Conf ( SHT2X_measurement_resolution_t myResolution, SHT2X_on_chip_heater_t myHeater )
mcm 1:9f1fcd1e4c9c 53 {
mcm 1:9f1fcd1e4c9c 54 char cmd[] = { SHT2X_READ_USER_REGISTER, 0 };
mcm 1:9f1fcd1e4c9c 55 uint32_t aux;
mcm 1:9f1fcd1e4c9c 56
mcm 1:9f1fcd1e4c9c 57
mcm 1:9f1fcd1e4c9c 58 /*
mcm 1:9f1fcd1e4c9c 59 Reserved bits must not be changed. Therefore, for any writing to user register, default values of reserved bits must be read first
mcm 1:9f1fcd1e4c9c 60 Datasheet: 5.6. User register p.19/14.
mcm 1:9f1fcd1e4c9c 61 */
mcm 1:9f1fcd1e4c9c 62 aux = _i2c.write ( _SHT2X_Addr, &cmd[0], 1U, true );
mcm 1:9f1fcd1e4c9c 63 aux = _i2c.read ( _SHT2X_Addr, &cmd[1], 1U );
mcm 1:9f1fcd1e4c9c 64
mcm 1:9f1fcd1e4c9c 65 cmd[1] &= ~( USER_REGISTER_RESOLUTION_MASK | USER_REGISTER_STATUS_END_BATTERY_MASK | USER_REGISTER_HEATER_MASK | USER_REGISTER_OTP_MASK );
mcm 1:9f1fcd1e4c9c 66 cmd[1] |= ( myResolution | myHeater | USER_REGISTER_OTP_DISABLED );
mcm 1:9f1fcd1e4c9c 67 cmd[0] = SHT2X_WRITE_USER_REGISTER;
mcm 1:9f1fcd1e4c9c 68
mcm 1:9f1fcd1e4c9c 69 aux = _i2c.write ( _SHT2X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), false );
mcm 1:9f1fcd1e4c9c 70
mcm 1:9f1fcd1e4c9c 71
mcm 1:9f1fcd1e4c9c 72
mcm 1:9f1fcd1e4c9c 73
mcm 1:9f1fcd1e4c9c 74 if ( aux == I2C_SUCCESS ) {
mcm 1:9f1fcd1e4c9c 75 return SHT2X_SUCCESS;
mcm 1:9f1fcd1e4c9c 76 } else {
mcm 1:9f1fcd1e4c9c 77 return SHT2X_FAILURE;
mcm 1:9f1fcd1e4c9c 78 }
mcm 1:9f1fcd1e4c9c 79 }
mcm 1:9f1fcd1e4c9c 80
mcm 1:9f1fcd1e4c9c 81
mcm 1:9f1fcd1e4c9c 82
mcm 1:9f1fcd1e4c9c 83 /**
mcm 1:9f1fcd1e4c9c 84 * @brief SHT2X_SoftReset ( void )
mcm 1:9f1fcd1e4c9c 85 * @details Rebooting the SHT2X sensor switching the power off and on again.
mcm 1:9f1fcd1e4c9c 86 *
mcm 1:9f1fcd1e4c9c 87 * @param[in] N/A.
mcm 1:9f1fcd1e4c9c 88 *
mcm 1:9f1fcd1e4c9c 89 * @param[out] N/A
mcm 1:9f1fcd1e4c9c 90 *
mcm 1:9f1fcd1e4c9c 91 *
mcm 1:9f1fcd1e4c9c 92 * @return Status of SHT2X_SoftReset.
mcm 1:9f1fcd1e4c9c 93 *
mcm 1:9f1fcd1e4c9c 94 * @author Manuel Caballero
mcm 1:9f1fcd1e4c9c 95 * @date 3/September/2018
mcm 1:9f1fcd1e4c9c 96 * @version 3/September/2018 The ORIGIN
mcm 1:9f1fcd1e4c9c 97 * @pre N/A
mcm 1:9f1fcd1e4c9c 98 * @warning The soft reset takes less than 15ms. The user MUST take this into account.
mcm 1:9f1fcd1e4c9c 99 */
mcm 1:9f1fcd1e4c9c 100 SHT2X::SHT2X_status_t SHT2X::SHT2X_SoftReset ( void )
mcm 1:9f1fcd1e4c9c 101 {
mcm 1:9f1fcd1e4c9c 102 char cmd = SHT2X_SOFT_RESET;
mcm 1:9f1fcd1e4c9c 103 uint32_t aux;
mcm 1:9f1fcd1e4c9c 104
mcm 1:9f1fcd1e4c9c 105
mcm 1:9f1fcd1e4c9c 106 aux = _i2c.write ( _SHT2X_Addr, &cmd, 1U, false );
mcm 1:9f1fcd1e4c9c 107
mcm 1:9f1fcd1e4c9c 108
mcm 1:9f1fcd1e4c9c 109 if ( aux == I2C_SUCCESS ) {
mcm 1:9f1fcd1e4c9c 110 return SHT2X_SUCCESS;
mcm 1:9f1fcd1e4c9c 111 } else {
mcm 1:9f1fcd1e4c9c 112 return SHT2X_FAILURE;
mcm 1:9f1fcd1e4c9c 113 }
mcm 1:9f1fcd1e4c9c 114 }
mcm 1:9f1fcd1e4c9c 115
mcm 1:9f1fcd1e4c9c 116
mcm 1:9f1fcd1e4c9c 117 /**
mcm 1:9f1fcd1e4c9c 118 * @brief SHT2X_TriggerTemperature ( SHT2X_master_mode_t )
mcm 1:9f1fcd1e4c9c 119 * @details It triggers a new temperature measurement.
mcm 1:9f1fcd1e4c9c 120 *
mcm 1:9f1fcd1e4c9c 121 * @param[in] myMode: Hold/No Hold mode.
mcm 1:9f1fcd1e4c9c 122 *
mcm 1:9f1fcd1e4c9c 123 * @param[out] N/A
mcm 1:9f1fcd1e4c9c 124 *
mcm 1:9f1fcd1e4c9c 125 *
mcm 1:9f1fcd1e4c9c 126 * @return Status of SHT2X_TriggerTemperature.
mcm 1:9f1fcd1e4c9c 127 *
mcm 1:9f1fcd1e4c9c 128 * @author Manuel Caballero
mcm 1:9f1fcd1e4c9c 129 * @date 3/September/2018
mcm 1:9f1fcd1e4c9c 130 * @version 3/September/2018 The ORIGIN
mcm 1:9f1fcd1e4c9c 131 * @pre N/A
mcm 1:9f1fcd1e4c9c 132 * @warning The user MUST respect the total conversion time.
mcm 1:9f1fcd1e4c9c 133 * 14-bit temperature: 66ms ( 85ms max )
mcm 1:9f1fcd1e4c9c 134 * 13-bit temperature: 33ms ( 43ms max )
mcm 1:9f1fcd1e4c9c 135 * 12-bit temperature: 17ms ( 22ms max )
mcm 1:9f1fcd1e4c9c 136 * 11-bit temperature: 9ms ( 11ms max )
mcm 1:9f1fcd1e4c9c 137 */
mcm 1:9f1fcd1e4c9c 138 SHT2X::SHT2X_status_t SHT2X::SHT2X_TriggerTemperature ( SHT2X_master_mode_t myMode )
mcm 1:9f1fcd1e4c9c 139 {
mcm 1:9f1fcd1e4c9c 140 char cmd = 0;
mcm 1:9f1fcd1e4c9c 141 bool myI2C_stop = false;
mcm 1:9f1fcd1e4c9c 142 uint32_t aux;
mcm 1:9f1fcd1e4c9c 143
mcm 1:9f1fcd1e4c9c 144
mcm 1:9f1fcd1e4c9c 145 /* Check the mode if it is HOLD MASTER MODE, if so, not to generate a stop bit */
mcm 1:9f1fcd1e4c9c 146 if ( myMode == SHT2X_HOLD_MASTER_MODE ) {
mcm 1:9f1fcd1e4c9c 147 cmd = SHT2X_TRIGGER_TEMPERATURE_MEASUREMENT_HOLD_MASTER;
mcm 1:9f1fcd1e4c9c 148 myI2C_stop = true;
mcm 1:9f1fcd1e4c9c 149 } else {
mcm 1:9f1fcd1e4c9c 150 cmd = SHT2X_TRIGGER_TEMPERATURE_MEASUREMENT_NO_HOLD_MASTER;
mcm 1:9f1fcd1e4c9c 151 myI2C_stop = false;
mcm 1:9f1fcd1e4c9c 152 }
mcm 1:9f1fcd1e4c9c 153
mcm 1:9f1fcd1e4c9c 154
mcm 1:9f1fcd1e4c9c 155 aux = _i2c.write ( _SHT2X_Addr, &cmd, 1U, myI2C_stop );
mcm 1:9f1fcd1e4c9c 156
mcm 1:9f1fcd1e4c9c 157
mcm 1:9f1fcd1e4c9c 158 /* NOTE: The user has to respect the total conversion time! */
mcm 1:9f1fcd1e4c9c 159
mcm 1:9f1fcd1e4c9c 160
mcm 1:9f1fcd1e4c9c 161
mcm 1:9f1fcd1e4c9c 162
mcm 1:9f1fcd1e4c9c 163 if ( aux == I2C_SUCCESS ) {
mcm 1:9f1fcd1e4c9c 164 return SHT2X_SUCCESS;
mcm 1:9f1fcd1e4c9c 165 } else {
mcm 1:9f1fcd1e4c9c 166 return SHT2X_FAILURE;
mcm 1:9f1fcd1e4c9c 167 }
mcm 1:9f1fcd1e4c9c 168 }
mcm 1:9f1fcd1e4c9c 169
mcm 1:9f1fcd1e4c9c 170
mcm 1:9f1fcd1e4c9c 171 /**
mcm 1:9f1fcd1e4c9c 172 * @brief SHT2X_ReadTemperature ( SHT2X_vector_data_t* )
mcm 1:9f1fcd1e4c9c 173 * @details It reads a new temperature measurement.
mcm 1:9f1fcd1e4c9c 174 *
mcm 1:9f1fcd1e4c9c 175 * @param[in] N/A
mcm 1:9f1fcd1e4c9c 176 *
mcm 1:9f1fcd1e4c9c 177 * @param[out] myTemperature: Variable to store the temperature.
mcm 1:9f1fcd1e4c9c 178 *
mcm 1:9f1fcd1e4c9c 179 *
mcm 1:9f1fcd1e4c9c 180 * @return Status of SHT2X_ReadTemperature.
mcm 1:9f1fcd1e4c9c 181 *
mcm 1:9f1fcd1e4c9c 182 * @author Manuel Caballero
mcm 1:9f1fcd1e4c9c 183 * @date 3/September/2018
mcm 1:9f1fcd1e4c9c 184 * @version 3/September/2018 The ORIGIN
mcm 1:9f1fcd1e4c9c 185 * @pre CRC is NOT taken into account.
mcm 1:9f1fcd1e4c9c 186 * @warning The measuring time depends on the chosen resolution. The user MUST take this into account.
mcm 1:9f1fcd1e4c9c 187 * @warning SHT2X_TriggerTemperature MUST be call before.
mcm 1:9f1fcd1e4c9c 188 */
mcm 1:9f1fcd1e4c9c 189 SHT2X::SHT2X_status_t SHT2X::SHT2X_ReadTemperature ( SHT2X_vector_data_t* myTemperature )
mcm 1:9f1fcd1e4c9c 190 {
mcm 1:9f1fcd1e4c9c 191 char cmd[] = { 0, 0, 0 };
mcm 1:9f1fcd1e4c9c 192 uint32_t aux;
mcm 1:9f1fcd1e4c9c 193
mcm 1:9f1fcd1e4c9c 194
mcm 1:9f1fcd1e4c9c 195 /* Read the temperature */
mcm 1:9f1fcd1e4c9c 196 aux = _i2c.read ( _SHT2X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) );
mcm 1:9f1fcd1e4c9c 197
mcm 1:9f1fcd1e4c9c 198 /* Parse the data */
mcm 1:9f1fcd1e4c9c 199 myTemperature->Temperature = ( ( cmd[0] << 8U ) | cmd[1] );
mcm 1:9f1fcd1e4c9c 200 myTemperature->Temperature /= 65536.0f;
mcm 1:9f1fcd1e4c9c 201 myTemperature->Temperature *= 175.72f;
mcm 1:9f1fcd1e4c9c 202 myTemperature->Temperature -= 46.85f;
mcm 1:9f1fcd1e4c9c 203
mcm 1:9f1fcd1e4c9c 204
mcm 1:9f1fcd1e4c9c 205
mcm 1:9f1fcd1e4c9c 206 if ( aux == I2C_SUCCESS ) {
mcm 1:9f1fcd1e4c9c 207 return SHT2X_SUCCESS;
mcm 1:9f1fcd1e4c9c 208 } else {
mcm 1:9f1fcd1e4c9c 209 return SHT2X_FAILURE;
mcm 1:9f1fcd1e4c9c 210 }
mcm 1:9f1fcd1e4c9c 211 }
mcm 1:9f1fcd1e4c9c 212
mcm 1:9f1fcd1e4c9c 213
mcm 1:9f1fcd1e4c9c 214
mcm 1:9f1fcd1e4c9c 215 /**
mcm 1:9f1fcd1e4c9c 216 * @brief SHT2X_ReadRawTemperature ( SHT2X_vector_data_t* )
mcm 1:9f1fcd1e4c9c 217 * @details It reads a new raw temperature measurement.
mcm 1:9f1fcd1e4c9c 218 *
mcm 1:9f1fcd1e4c9c 219 * @param[in] N/A
mcm 1:9f1fcd1e4c9c 220 *
mcm 1:9f1fcd1e4c9c 221 * @param[out] myRawTemperature: Variable to store the temperature.
mcm 1:9f1fcd1e4c9c 222 *
mcm 1:9f1fcd1e4c9c 223 *
mcm 1:9f1fcd1e4c9c 224 * @return Status of SHT2X_ReadTemperature.
mcm 1:9f1fcd1e4c9c 225 *
mcm 1:9f1fcd1e4c9c 226 * @author Manuel Caballero
mcm 1:9f1fcd1e4c9c 227 * @date 3/September/2018
mcm 1:9f1fcd1e4c9c 228 * @version 3/September/2018 The ORIGIN
mcm 1:9f1fcd1e4c9c 229 * @pre CRC is NOT taken into account.
mcm 1:9f1fcd1e4c9c 230 * @warning The measuring time depends on the chosen resolution. The user MUST take this into account.
mcm 1:9f1fcd1e4c9c 231 * @warning No Hold Master is ONLY implemented.
mcm 1:9f1fcd1e4c9c 232 * @warning SHT2X_TriggerTemperature MUST be call before.
mcm 1:9f1fcd1e4c9c 233 */
mcm 1:9f1fcd1e4c9c 234 SHT2X::SHT2X_status_t SHT2X::SHT2X_ReadRawTemperature ( SHT2X_vector_data_t* myRawTemperature )
mcm 1:9f1fcd1e4c9c 235 {
mcm 1:9f1fcd1e4c9c 236 char cmd[] = { 0, 0, 0 };
mcm 1:9f1fcd1e4c9c 237 uint32_t aux;
mcm 1:9f1fcd1e4c9c 238
mcm 1:9f1fcd1e4c9c 239
mcm 1:9f1fcd1e4c9c 240 /* Read the temperature */
mcm 1:9f1fcd1e4c9c 241 aux = _i2c.read ( _SHT2X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) );
mcm 1:9f1fcd1e4c9c 242
mcm 1:9f1fcd1e4c9c 243 /* Parse the data */
mcm 1:9f1fcd1e4c9c 244 myRawTemperature->RawTemperature = ( ( cmd[0] << 8U ) | cmd[1] );
mcm 1:9f1fcd1e4c9c 245
mcm 1:9f1fcd1e4c9c 246
mcm 1:9f1fcd1e4c9c 247
mcm 1:9f1fcd1e4c9c 248
mcm 1:9f1fcd1e4c9c 249 if ( aux == I2C_SUCCESS ) {
mcm 1:9f1fcd1e4c9c 250 return SHT2X_SUCCESS;
mcm 1:9f1fcd1e4c9c 251 } else {
mcm 1:9f1fcd1e4c9c 252 return SHT2X_FAILURE;
mcm 1:9f1fcd1e4c9c 253 }
mcm 1:9f1fcd1e4c9c 254 }
mcm 1:9f1fcd1e4c9c 255
mcm 1:9f1fcd1e4c9c 256
mcm 1:9f1fcd1e4c9c 257 /**
mcm 1:9f1fcd1e4c9c 258 * @brief SHT2X_TriggerHumidity ( SHT2X_master_mode_t )
mcm 1:9f1fcd1e4c9c 259 * @details It triggers a new humidity measurement.
mcm 1:9f1fcd1e4c9c 260 *
mcm 1:9f1fcd1e4c9c 261 * @param[in] myMode: Hold/No Hold mode.
mcm 1:9f1fcd1e4c9c 262 *
mcm 1:9f1fcd1e4c9c 263 * @param[out] N/A
mcm 1:9f1fcd1e4c9c 264 *
mcm 1:9f1fcd1e4c9c 265 *
mcm 1:9f1fcd1e4c9c 266 * @return Status of SHT2X_TriggerHumidity.
mcm 1:9f1fcd1e4c9c 267 *
mcm 1:9f1fcd1e4c9c 268 * @author Manuel Caballero
mcm 1:9f1fcd1e4c9c 269 * @date 3/September/2018
mcm 1:9f1fcd1e4c9c 270 * @version 3/September/2018 The ORIGIN
mcm 1:9f1fcd1e4c9c 271 * @pre N/A
mcm 1:9f1fcd1e4c9c 272 * @warning The user MUST respect the total conversion time.
mcm 1:9f1fcd1e4c9c 273 * 12-bit RH: 22ms ( 29ms max )
mcm 1:9f1fcd1e4c9c 274 * 11-bit RH: 12ms ( 15ms max )
mcm 1:9f1fcd1e4c9c 275 * 10-bit RH: 7ms ( 9ms max )
mcm 1:9f1fcd1e4c9c 276 * 8-bit RH: 3ms ( 4ms max )
mcm 1:9f1fcd1e4c9c 277 */
mcm 1:9f1fcd1e4c9c 278 SHT2X::SHT2X_status_t SHT2X::SHT2X_TriggerHumidity ( SHT2X_master_mode_t myMode )
mcm 1:9f1fcd1e4c9c 279 {
mcm 1:9f1fcd1e4c9c 280 char cmd = 0;
mcm 1:9f1fcd1e4c9c 281 bool myI2C_stop = false;
mcm 1:9f1fcd1e4c9c 282 uint32_t aux;
mcm 1:9f1fcd1e4c9c 283
mcm 1:9f1fcd1e4c9c 284
mcm 1:9f1fcd1e4c9c 285 /* Check the mode if it is HOLD MASTER MODE, then not generate a stop bit */
mcm 1:9f1fcd1e4c9c 286 if ( myMode == SHT2X_HOLD_MASTER_MODE ) {
mcm 1:9f1fcd1e4c9c 287 cmd = SHT2X_TRIGGER_HUMIDITY_MEASUREMENT_HOLD_MASTER;
mcm 1:9f1fcd1e4c9c 288 myI2C_stop = true;
mcm 1:9f1fcd1e4c9c 289 } else {
mcm 1:9f1fcd1e4c9c 290 cmd = SHT2X_TRIGGER_HUMIDITY_MEASUREMENT_NO_HOLD_MASTER;
mcm 1:9f1fcd1e4c9c 291 myI2C_stop = false;
mcm 1:9f1fcd1e4c9c 292 }
mcm 1:9f1fcd1e4c9c 293
mcm 1:9f1fcd1e4c9c 294
mcm 1:9f1fcd1e4c9c 295 aux = _i2c.write ( _SHT2X_Addr, &cmd, 1U, myI2C_stop );
mcm 1:9f1fcd1e4c9c 296
mcm 1:9f1fcd1e4c9c 297
mcm 1:9f1fcd1e4c9c 298 /* NOTE: The user has to respect the total conversion time! */
mcm 1:9f1fcd1e4c9c 299
mcm 1:9f1fcd1e4c9c 300
mcm 1:9f1fcd1e4c9c 301 if ( aux == I2C_SUCCESS ) {
mcm 1:9f1fcd1e4c9c 302 return SHT2X_SUCCESS;
mcm 1:9f1fcd1e4c9c 303 } else {
mcm 1:9f1fcd1e4c9c 304 return SHT2X_FAILURE;
mcm 1:9f1fcd1e4c9c 305 }
mcm 1:9f1fcd1e4c9c 306 }
mcm 1:9f1fcd1e4c9c 307
mcm 1:9f1fcd1e4c9c 308
mcm 1:9f1fcd1e4c9c 309 /**
mcm 1:9f1fcd1e4c9c 310 * @brief SHT2X_ReadHumidity ( SHT2X_vector_data_t* )
mcm 1:9f1fcd1e4c9c 311 * @details It reads a new humidity measurement.
mcm 1:9f1fcd1e4c9c 312 *
mcm 1:9f1fcd1e4c9c 313 * @param[in] N/A
mcm 1:9f1fcd1e4c9c 314 *
mcm 1:9f1fcd1e4c9c 315 * @param[out] myHumidity: Variable to store the humidity.
mcm 1:9f1fcd1e4c9c 316 *
mcm 1:9f1fcd1e4c9c 317 *
mcm 1:9f1fcd1e4c9c 318 * @return Status of SHT2X_ReadHumidity.
mcm 1:9f1fcd1e4c9c 319 *
mcm 1:9f1fcd1e4c9c 320 * @author Manuel Caballero
mcm 1:9f1fcd1e4c9c 321 * @date 3/September/2018
mcm 1:9f1fcd1e4c9c 322 * @version 3/September/2018 The ORIGIN
mcm 1:9f1fcd1e4c9c 323 * @pre CRC is NOT taken into account.
mcm 1:9f1fcd1e4c9c 324 * @warning The measuring time depends on the chosen resolution. The user MUST take this into account.
mcm 1:9f1fcd1e4c9c 325 * @warning SHT2X_TriggerHumidity MUST be call before.
mcm 1:9f1fcd1e4c9c 326 */
mcm 1:9f1fcd1e4c9c 327 SHT2X::SHT2X_status_t SHT2X::SHT2X_ReadHumidity ( SHT2X_vector_data_t* myHumidity )
mcm 1:9f1fcd1e4c9c 328 {
mcm 1:9f1fcd1e4c9c 329 char cmd[] = { 0, 0, 0 };
mcm 1:9f1fcd1e4c9c 330 uint32_t aux;
mcm 1:9f1fcd1e4c9c 331
mcm 1:9f1fcd1e4c9c 332
mcm 1:9f1fcd1e4c9c 333 /* Read the relative humidity */
mcm 1:9f1fcd1e4c9c 334 aux = _i2c.read ( _SHT2X_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) );
mcm 1:9f1fcd1e4c9c 335
mcm 1:9f1fcd1e4c9c 336 /* Parse the data */
mcm 1:9f1fcd1e4c9c 337 myHumidity->RelativeHumidity = ( ( cmd[0] << 8U ) | cmd[1] );
mcm 1:9f1fcd1e4c9c 338 myHumidity->RelativeHumidity /= 65536.0f;
mcm 1:9f1fcd1e4c9c 339 myHumidity->RelativeHumidity *= 125.0f;
mcm 1:9f1fcd1e4c9c 340 myHumidity->RelativeHumidity -= 6.0f;
mcm 1:9f1fcd1e4c9c 341
mcm 1:9f1fcd1e4c9c 342
mcm 1:9f1fcd1e4c9c 343
mcm 1:9f1fcd1e4c9c 344
mcm 1:9f1fcd1e4c9c 345 if ( aux == I2C_SUCCESS ) {
mcm 1:9f1fcd1e4c9c 346 return SHT2X_SUCCESS;
mcm 1:9f1fcd1e4c9c 347 } else {
mcm 1:9f1fcd1e4c9c 348 return SHT2X_FAILURE;
mcm 1:9f1fcd1e4c9c 349 }
mcm 1:9f1fcd1e4c9c 350 }
mcm 1:9f1fcd1e4c9c 351
mcm 1:9f1fcd1e4c9c 352
mcm 1:9f1fcd1e4c9c 353
mcm 1:9f1fcd1e4c9c 354 /**
mcm 1:9f1fcd1e4c9c 355 * @brief SHT2X_ReadRawHumidity ( SHT2X_vector_data_t* )
mcm 1:9f1fcd1e4c9c 356 * @details It reads a new raw humidity measurement.
mcm 1:9f1fcd1e4c9c 357 *
mcm 1:9f1fcd1e4c9c 358 * @param[in] mN/A
mcm 1:9f1fcd1e4c9c 359 *
mcm 1:9f1fcd1e4c9c 360 * @param[out] myHumidity: Variable to store the humidity.
mcm 1:9f1fcd1e4c9c 361 *
mcm 1:9f1fcd1e4c9c 362 *
mcm 1:9f1fcd1e4c9c 363 * @return Status of SHT2X_ReadHumidity.
mcm 1:9f1fcd1e4c9c 364 *
mcm 1:9f1fcd1e4c9c 365 * @author Manuel Caballero
mcm 1:9f1fcd1e4c9c 366 * @date 3/September/2018
mcm 1:9f1fcd1e4c9c 367 * @version 3/September/2018 The ORIGIN
mcm 1:9f1fcd1e4c9c 368 * @pre CRC is NOT taken into account.
mcm 1:9f1fcd1e4c9c 369 * @warning The measuring time depends on the chosen resolution. The user MUST take this into account.
mcm 1:9f1fcd1e4c9c 370 * @warning No Hold Master is ONLY implemented.
mcm 1:9f1fcd1e4c9c 371 * @warning SHT2X_TriggerHumidity MUST be call before.
mcm 1:9f1fcd1e4c9c 372 */
mcm 1:9f1fcd1e4c9c 373 SHT2X::SHT2X_status_t SHT2X::SHT2X_ReadRawHumidity ( SHT2X_vector_data_t* myHumidity )
mcm 1:9f1fcd1e4c9c 374 {
mcm 1:9f1fcd1e4c9c 375 char cmd[] = { 0, 0, 0 };
mcm 1:9f1fcd1e4c9c 376 uint32_t aux;
mcm 1:9f1fcd1e4c9c 377
mcm 1:9f1fcd1e4c9c 378
mcm 1:9f1fcd1e4c9c 379 /* Read the relative humidity */
mcm 1:9f1fcd1e4c9c 380 aux = _i2c.read ( _SHT2X_Addr, &cmd[0], 3U );
mcm 1:9f1fcd1e4c9c 381
mcm 1:9f1fcd1e4c9c 382 /* Parse the data */
mcm 1:9f1fcd1e4c9c 383 myHumidity->RawRelativeHumidity = ( ( cmd[0] << 8U ) | cmd[1] );
mcm 1:9f1fcd1e4c9c 384
mcm 1:9f1fcd1e4c9c 385
mcm 1:9f1fcd1e4c9c 386
mcm 1:9f1fcd1e4c9c 387
mcm 1:9f1fcd1e4c9c 388 if ( aux == I2C_SUCCESS ) {
mcm 1:9f1fcd1e4c9c 389 return SHT2X_SUCCESS;
mcm 1:9f1fcd1e4c9c 390 } else {
mcm 1:9f1fcd1e4c9c 391 return SHT2X_FAILURE;
mcm 1:9f1fcd1e4c9c 392 }
mcm 1:9f1fcd1e4c9c 393 }
mcm 1:9f1fcd1e4c9c 394
mcm 1:9f1fcd1e4c9c 395
mcm 1:9f1fcd1e4c9c 396 /**
mcm 1:9f1fcd1e4c9c 397 * @brief SHT2X_BatteryStatus ( SHT2X_vector_data_t* )
mcm 1:9f1fcd1e4c9c 398 * @details It reads the user register to check the battery status.
mcm 1:9f1fcd1e4c9c 399 *
mcm 1:9f1fcd1e4c9c 400 * @param[in] N/A
mcm 1:9f1fcd1e4c9c 401 *
mcm 1:9f1fcd1e4c9c 402 * @param[out] myBattStatus: Variable to store the battery status.
mcm 1:9f1fcd1e4c9c 403 *
mcm 1:9f1fcd1e4c9c 404 *
mcm 1:9f1fcd1e4c9c 405 * @return Status of SHT2X_BatteryStatus.
mcm 1:9f1fcd1e4c9c 406 *
mcm 1:9f1fcd1e4c9c 407 * @author Manuel Caballero
mcm 1:9f1fcd1e4c9c 408 * @date 3/September/2018
mcm 1:9f1fcd1e4c9c 409 * @version 3/September/2018 The ORIGIN
mcm 1:9f1fcd1e4c9c 410 * @pre CRC is NOT taken into account.
mcm 1:9f1fcd1e4c9c 411 * @warning N/A.
mcm 1:9f1fcd1e4c9c 412 */
mcm 1:9f1fcd1e4c9c 413 SHT2X::SHT2X_status_t SHT2X::SHT2X_BatteryStatus ( SHT2X_vector_data_t* myBattStatus )
mcm 1:9f1fcd1e4c9c 414 {
mcm 1:9f1fcd1e4c9c 415 char cmd = SHT2X_READ_USER_REGISTER;
mcm 1:9f1fcd1e4c9c 416 uint32_t aux;
mcm 1:9f1fcd1e4c9c 417
mcm 1:9f1fcd1e4c9c 418
mcm 1:9f1fcd1e4c9c 419 /* Get the battery status */
mcm 1:9f1fcd1e4c9c 420 aux = _i2c.write ( _SHT2X_Addr, &cmd, 1U, true );
mcm 1:9f1fcd1e4c9c 421 aux = _i2c.read ( _SHT2X_Addr, &cmd, 1U );
mcm 1:9f1fcd1e4c9c 422
mcm 1:9f1fcd1e4c9c 423 /* Parse the data */
mcm 1:9f1fcd1e4c9c 424 myBattStatus->BatteryStatus = ( cmd & USER_REGISTER_STATUS_END_BATTERY_MASK );
mcm 1:9f1fcd1e4c9c 425
mcm 1:9f1fcd1e4c9c 426
mcm 1:9f1fcd1e4c9c 427
mcm 1:9f1fcd1e4c9c 428
mcm 1:9f1fcd1e4c9c 429 if ( aux == I2C_SUCCESS ) {
mcm 1:9f1fcd1e4c9c 430 return SHT2X_SUCCESS;
mcm 1:9f1fcd1e4c9c 431 } else {
mcm 1:9f1fcd1e4c9c 432 return SHT2X_FAILURE;
mcm 1:9f1fcd1e4c9c 433 }
mcm 1:9f1fcd1e4c9c 434 }
mcm 1:9f1fcd1e4c9c 435
mcm 1:9f1fcd1e4c9c 436
mcm 1:9f1fcd1e4c9c 437
mcm 1:9f1fcd1e4c9c 438 /**
mcm 1:9f1fcd1e4c9c 439 * @brief SHT2X_GetSerialNumber ( SHT2X_vector_data_t* )
mcm 1:9f1fcd1e4c9c 440 * @details It gets the serial number ( Electronic Identification Code ).
mcm 1:9f1fcd1e4c9c 441 *
mcm 1:9f1fcd1e4c9c 442 * @param[in] N/A
mcm 1:9f1fcd1e4c9c 443 *
mcm 1:9f1fcd1e4c9c 444 * @param[out] mySerialNumber: Device serial number.
mcm 1:9f1fcd1e4c9c 445 *
mcm 1:9f1fcd1e4c9c 446 *
mcm 1:9f1fcd1e4c9c 447 * @return Status of SHT2X_GetSerialNumber.
mcm 1:9f1fcd1e4c9c 448 *
mcm 1:9f1fcd1e4c9c 449 * @author Manuel Caballero
mcm 1:9f1fcd1e4c9c 450 * @date 3/September/2018
mcm 1:9f1fcd1e4c9c 451 * @version 3/September/2018 The ORIGIN
mcm 1:9f1fcd1e4c9c 452 * @pre Composition of Serial Number: SNA_1 | SNA_0 | SNB_3 | SNB_2 | SNB_1 | SNB_0 | SNC_1 | SNC_0
mcm 1:9f1fcd1e4c9c 453 * @pre CRC is NOT taken into account.
mcm 1:9f1fcd1e4c9c 454 * @warning N/A.
mcm 1:9f1fcd1e4c9c 455 */
mcm 1:9f1fcd1e4c9c 456 SHT2X::SHT2X_status_t SHT2X::SHT2X_GetSerialNumber ( SHT2X_vector_data_t* mySerialNumber )
mcm 1:9f1fcd1e4c9c 457 {
mcm 1:9f1fcd1e4c9c 458 char cmd[14] = { 0 };
mcm 1:9f1fcd1e4c9c 459 uint32_t aux;
mcm 1:9f1fcd1e4c9c 460
mcm 1:9f1fcd1e4c9c 461
mcm 1:9f1fcd1e4c9c 462 /* Serial number: first memory access */
mcm 1:9f1fcd1e4c9c 463 cmd[0] = SHT2X_SERIAL_NUMBER_FIRST_MEMORY_ACCESS_MSB;
mcm 1:9f1fcd1e4c9c 464 cmd[1] = SHT2X_SERIAL_NUMBER_FIRST_MEMORY_ACCESS_LSB;
mcm 1:9f1fcd1e4c9c 465 aux = _i2c.write ( _SHT2X_Addr, &cmd[0], 2U, true );
mcm 1:9f1fcd1e4c9c 466 aux = _i2c.read ( _SHT2X_Addr, &cmd[0], 8U );
mcm 1:9f1fcd1e4c9c 467
mcm 1:9f1fcd1e4c9c 468 /* Serial number: second memory access */
mcm 1:9f1fcd1e4c9c 469 cmd[8] = SHT2X_SERIAL_NUMBER_SECOND_MEMORY_ACCESS_MSB;
mcm 1:9f1fcd1e4c9c 470 cmd[9] = SHT2X_SERIAL_NUMBER_SECOND_MEMORY_ACCESS_LSB;
mcm 1:9f1fcd1e4c9c 471 aux = _i2c.write ( _SHT2X_Addr, &cmd[8], 2U, true );
mcm 1:9f1fcd1e4c9c 472 aux = _i2c.read ( _SHT2X_Addr, &cmd[8], 6U );
mcm 1:9f1fcd1e4c9c 473
mcm 1:9f1fcd1e4c9c 474
mcm 1:9f1fcd1e4c9c 475 /* Parse the data */
mcm 1:9f1fcd1e4c9c 476 mySerialNumber->SerialNumber = cmd[11]; // SNA_1
mcm 1:9f1fcd1e4c9c 477 mySerialNumber->SerialNumber <<= 8U;
mcm 1:9f1fcd1e4c9c 478
mcm 1:9f1fcd1e4c9c 479 mySerialNumber->SerialNumber |= cmd[12]; // SNA_0
mcm 1:9f1fcd1e4c9c 480 mySerialNumber->SerialNumber <<= 8U;
mcm 1:9f1fcd1e4c9c 481
mcm 1:9f1fcd1e4c9c 482 mySerialNumber->SerialNumber |= cmd[0]; // SNB_3
mcm 1:9f1fcd1e4c9c 483 mySerialNumber->SerialNumber <<= 8U;
mcm 1:9f1fcd1e4c9c 484
mcm 1:9f1fcd1e4c9c 485 mySerialNumber->SerialNumber |= cmd[2]; // SNB_2
mcm 1:9f1fcd1e4c9c 486 mySerialNumber->SerialNumber <<= 8U;
mcm 1:9f1fcd1e4c9c 487
mcm 1:9f1fcd1e4c9c 488 mySerialNumber->SerialNumber |= cmd[4]; // SNB_1
mcm 1:9f1fcd1e4c9c 489 mySerialNumber->SerialNumber <<= 8U;
mcm 1:9f1fcd1e4c9c 490
mcm 1:9f1fcd1e4c9c 491 mySerialNumber->SerialNumber |= cmd[6]; // SNB_0
mcm 1:9f1fcd1e4c9c 492 mySerialNumber->SerialNumber <<= 8U;
mcm 1:9f1fcd1e4c9c 493
mcm 1:9f1fcd1e4c9c 494 mySerialNumber->SerialNumber |= cmd[8]; // SNC_1
mcm 1:9f1fcd1e4c9c 495 mySerialNumber->SerialNumber <<= 8U;
mcm 1:9f1fcd1e4c9c 496
mcm 1:9f1fcd1e4c9c 497 mySerialNumber->SerialNumber |= cmd[9]; // SNC_0
mcm 1:9f1fcd1e4c9c 498
mcm 1:9f1fcd1e4c9c 499
mcm 1:9f1fcd1e4c9c 500
mcm 1:9f1fcd1e4c9c 501
mcm 1:9f1fcd1e4c9c 502 if ( aux == I2C_SUCCESS ) {
mcm 1:9f1fcd1e4c9c 503 return SHT2X_SUCCESS;
mcm 1:9f1fcd1e4c9c 504 } else {
mcm 1:9f1fcd1e4c9c 505 return SHT2X_FAILURE;
mcm 1:9f1fcd1e4c9c 506 }
mcm 1:9f1fcd1e4c9c 507 }