I2C HUMIDITY AND TEMPERATURE SENSOR
SI7021.cpp@3:75cece7f7329, 2018-02-05 (annotated)
- Committer:
- mcm
- Date:
- Mon Feb 05 12:51:46 2018 +0000
- Revision:
- 3:75cece7f7329
- Parent:
- 2:18c159179b08
The library was completed and tested, it works as expected ( NUCLEO-L152RE was used for testing )
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mcm | 2:18c159179b08 | 1 | /** |
mcm | 2:18c159179b08 | 2 | * @brief SI7021.h |
mcm | 2:18c159179b08 | 3 | * @details I2C HUMIDITY AND TEMPERATURE SENSOR. |
mcm | 2:18c159179b08 | 4 | * Header file. |
mcm | 2:18c159179b08 | 5 | * |
mcm | 2:18c159179b08 | 6 | * |
mcm | 2:18c159179b08 | 7 | * @return NA |
mcm | 2:18c159179b08 | 8 | * |
mcm | 2:18c159179b08 | 9 | * @author Manuel Caballero |
mcm | 2:18c159179b08 | 10 | * @date 5/February/2018 |
mcm | 2:18c159179b08 | 11 | * @version 5/February/2018 The ORIGIN |
mcm | 2:18c159179b08 | 12 | * @pre N/A. |
mcm | 2:18c159179b08 | 13 | * @warning N/A |
mcm | 2:18c159179b08 | 14 | * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ). |
mcm | 2:18c159179b08 | 15 | */ |
mcm | 2:18c159179b08 | 16 | |
mcm | 2:18c159179b08 | 17 | #include "SI7021.h" |
mcm | 2:18c159179b08 | 18 | |
mcm | 2:18c159179b08 | 19 | |
mcm | 2:18c159179b08 | 20 | SI7021::SI7021 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq ) |
mcm | 2:18c159179b08 | 21 | : _i2c ( sda, scl ) |
mcm | 2:18c159179b08 | 22 | , _SI7021_Addr ( addr ) |
mcm | 2:18c159179b08 | 23 | { |
mcm | 2:18c159179b08 | 24 | _i2c.frequency( freq ); |
mcm | 2:18c159179b08 | 25 | } |
mcm | 2:18c159179b08 | 26 | |
mcm | 2:18c159179b08 | 27 | |
mcm | 2:18c159179b08 | 28 | SI7021::~SI7021() |
mcm | 2:18c159179b08 | 29 | { |
mcm | 2:18c159179b08 | 30 | } |
mcm | 2:18c159179b08 | 31 | |
mcm | 2:18c159179b08 | 32 | |
mcm | 2:18c159179b08 | 33 | |
mcm | 2:18c159179b08 | 34 | /** |
mcm | 2:18c159179b08 | 35 | * @brief SI7021_Conf ( SI7021_measurement_resolution_t , SI7021_heater_t ) |
mcm | 2:18c159179b08 | 36 | * |
mcm | 2:18c159179b08 | 37 | * @details It configures the device: resolution and heater. |
mcm | 2:18c159179b08 | 38 | * |
mcm | 2:18c159179b08 | 39 | * @param[in] myResolution: Resolution for RH and temperature. |
mcm | 2:18c159179b08 | 40 | * @param[in] myHeater: Enable/Disable heater. |
mcm | 2:18c159179b08 | 41 | * |
mcm | 2:18c159179b08 | 42 | * @param[out] N/A. |
mcm | 2:18c159179b08 | 43 | * |
mcm | 2:18c159179b08 | 44 | * |
mcm | 2:18c159179b08 | 45 | * @return Status of SI7021_Conf. |
mcm | 2:18c159179b08 | 46 | * |
mcm | 2:18c159179b08 | 47 | * |
mcm | 2:18c159179b08 | 48 | * @author Manuel Caballero |
mcm | 2:18c159179b08 | 49 | * @date 5/February/2018 |
mcm | 2:18c159179b08 | 50 | * @version 5/February/2018 The ORIGIN |
mcm | 2:18c159179b08 | 51 | * @pre Except where noted, reserved register bits will always read back as “1,” and are not affected by write operations. For |
mcm | 2:18c159179b08 | 52 | * future compatibility, it is recommended that prior to a write operation, registers should be read. Then the values read |
mcm | 2:18c159179b08 | 53 | * from the RSVD bits should be written back unchanged during the write operation |
mcm | 2:18c159179b08 | 54 | * @warning N/A. |
mcm | 2:18c159179b08 | 55 | */ |
mcm | 2:18c159179b08 | 56 | SI7021::SI7021_status_t SI7021::SI7021_Conf ( SI7021_measurement_resolution_t myResolution, SI7021_heater_t myHeater ) |
mcm | 2:18c159179b08 | 57 | { |
mcm | 2:18c159179b08 | 58 | char cmd[] = { SI7021_READ_RH_T_USER_REGISTER_1, 0 }; |
mcm | 2:18c159179b08 | 59 | uint32_t aux = 0; |
mcm | 2:18c159179b08 | 60 | |
mcm | 2:18c159179b08 | 61 | |
mcm | 2:18c159179b08 | 62 | |
mcm | 2:18c159179b08 | 63 | // Read USER REGISTER to mask it |
mcm | 2:18c159179b08 | 64 | aux = _i2c.write ( _SI7021_Addr, &cmd[0], 1, true ); |
mcm | 2:18c159179b08 | 65 | aux = _i2c.read ( _SI7021_Addr, &cmd[1], 1 ); |
mcm | 2:18c159179b08 | 66 | |
mcm | 2:18c159179b08 | 67 | |
mcm | 2:18c159179b08 | 68 | // Update USER REGISTER according to user requirements |
mcm | 2:18c159179b08 | 69 | // Resolution |
mcm | 2:18c159179b08 | 70 | cmd[1] &= ~SI7021_RESOLUTION_MASK; |
mcm | 2:18c159179b08 | 71 | cmd[1] |= myResolution; |
mcm | 2:18c159179b08 | 72 | |
mcm | 2:18c159179b08 | 73 | // Hater |
mcm | 2:18c159179b08 | 74 | cmd[1] &= ~SI7021_HTRE_MASK; |
mcm | 2:18c159179b08 | 75 | cmd[1] |= myHeater; |
mcm | 2:18c159179b08 | 76 | |
mcm | 2:18c159179b08 | 77 | |
mcm | 2:18c159179b08 | 78 | |
mcm | 2:18c159179b08 | 79 | // Update USER REGISTER |
mcm | 2:18c159179b08 | 80 | cmd[0] = SI7021_WRITE_RH_T_USER_REGISTER_1; |
mcm | 2:18c159179b08 | 81 | aux = _i2c.write ( _SI7021_Addr, &cmd[0], 2, false ); |
mcm | 2:18c159179b08 | 82 | |
mcm | 2:18c159179b08 | 83 | |
mcm | 2:18c159179b08 | 84 | |
mcm | 2:18c159179b08 | 85 | |
mcm | 2:18c159179b08 | 86 | if ( aux == I2C_SUCCESS ) |
mcm | 2:18c159179b08 | 87 | return SI7021_SUCCESS; |
mcm | 2:18c159179b08 | 88 | else |
mcm | 2:18c159179b08 | 89 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 90 | } |
mcm | 2:18c159179b08 | 91 | |
mcm | 2:18c159179b08 | 92 | |
mcm | 2:18c159179b08 | 93 | |
mcm | 2:18c159179b08 | 94 | /** |
mcm | 2:18c159179b08 | 95 | * @brief SI7021_SoftReset ( void ) |
mcm | 2:18c159179b08 | 96 | * |
mcm | 2:18c159179b08 | 97 | * @details It resets the device by software. |
mcm | 2:18c159179b08 | 98 | * |
mcm | 2:18c159179b08 | 99 | * @param[in] N/A |
mcm | 2:18c159179b08 | 100 | * |
mcm | 2:18c159179b08 | 101 | * @param[out] N/A. |
mcm | 2:18c159179b08 | 102 | * |
mcm | 2:18c159179b08 | 103 | * |
mcm | 2:18c159179b08 | 104 | * @return Status of SI7021_SoftReset. |
mcm | 2:18c159179b08 | 105 | * |
mcm | 2:18c159179b08 | 106 | * |
mcm | 2:18c159179b08 | 107 | * @author Manuel Caballero |
mcm | 2:18c159179b08 | 108 | * @date 5/February/2018 |
mcm | 2:18c159179b08 | 109 | * @version 5/February/2018 The ORIGIN |
mcm | 2:18c159179b08 | 110 | * @pre N/A |
mcm | 2:18c159179b08 | 111 | * @warning The user MUST keep in mind that the device will be |
mcm | 2:18c159179b08 | 112 | * available after 5ms ( typically, 15ms maximum ) |
mcm | 2:18c159179b08 | 113 | * The user MUST take care of this delay!. |
mcm | 2:18c159179b08 | 114 | */ |
mcm | 2:18c159179b08 | 115 | SI7021::SI7021_status_t SI7021::SI7021_SoftReset ( void ) |
mcm | 2:18c159179b08 | 116 | { |
mcm | 2:18c159179b08 | 117 | char cmd = SI7021_RESET; |
mcm | 2:18c159179b08 | 118 | uint32_t aux = 0; |
mcm | 2:18c159179b08 | 119 | |
mcm | 2:18c159179b08 | 120 | |
mcm | 2:18c159179b08 | 121 | aux = _i2c.write ( _SI7021_Addr, &cmd, 1, false ); |
mcm | 2:18c159179b08 | 122 | |
mcm | 2:18c159179b08 | 123 | // The user needs to wait for certain period of time before communicating |
mcm | 2:18c159179b08 | 124 | // with the device again. |
mcm | 2:18c159179b08 | 125 | |
mcm | 2:18c159179b08 | 126 | |
mcm | 2:18c159179b08 | 127 | if ( aux == I2C_SUCCESS ) |
mcm | 2:18c159179b08 | 128 | return SI7021_SUCCESS; |
mcm | 2:18c159179b08 | 129 | else |
mcm | 2:18c159179b08 | 130 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 131 | } |
mcm | 2:18c159179b08 | 132 | |
mcm | 2:18c159179b08 | 133 | |
mcm | 2:18c159179b08 | 134 | |
mcm | 2:18c159179b08 | 135 | /** |
mcm | 2:18c159179b08 | 136 | * @brief SI7021_GetElectronicSerialNumber ( SI7021_vector_data_t* ) |
mcm | 2:18c159179b08 | 137 | * |
mcm | 2:18c159179b08 | 138 | * @details It gets the electronic serial number. |
mcm | 2:18c159179b08 | 139 | * |
mcm | 2:18c159179b08 | 140 | * @param[in] N/A |
mcm | 2:18c159179b08 | 141 | * |
mcm | 2:18c159179b08 | 142 | * @param[out] mySerialNumber: The Electronic Serial Number. |
mcm | 2:18c159179b08 | 143 | * |
mcm | 2:18c159179b08 | 144 | * |
mcm | 2:18c159179b08 | 145 | * @return Status of SI7021_GetElectronicSerialNumber. |
mcm | 2:18c159179b08 | 146 | * |
mcm | 2:18c159179b08 | 147 | * |
mcm | 2:18c159179b08 | 148 | * @author Manuel Caballero |
mcm | 2:18c159179b08 | 149 | * @date 5/February/2018 |
mcm | 2:18c159179b08 | 150 | * @version 5/February/2018 The ORIGIN |
mcm | 2:18c159179b08 | 151 | * @pre This function does NOT check the CRC |
mcm | 2:18c159179b08 | 152 | * @warning N/A. |
mcm | 2:18c159179b08 | 153 | */ |
mcm | 2:18c159179b08 | 154 | SI7021::SI7021_status_t SI7021::SI7021_GetElectronicSerialNumber ( SI7021_vector_data_t* mySerialNumber ) |
mcm | 2:18c159179b08 | 155 | { |
mcm | 2:18c159179b08 | 156 | char cmd[] = { SI7021_READ_ELECTRONIC_ID_FIRST_BYTE_CMD1, SI7021_READ_ELECTRONIC_ID_FIRST_BYTE_CMD2, 0, 0, 0, 0, 0, 0 }; |
mcm | 2:18c159179b08 | 157 | uint32_t aux = 0; |
mcm | 2:18c159179b08 | 158 | |
mcm | 2:18c159179b08 | 159 | |
mcm | 2:18c159179b08 | 160 | // Read Electronic Serial Number. First Access |
mcm | 2:18c159179b08 | 161 | aux = _i2c.write ( _SI7021_Addr, &cmd[0], 2, true ); |
mcm | 2:18c159179b08 | 162 | aux = _i2c.read ( _SI7021_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); |
mcm | 2:18c159179b08 | 163 | |
mcm | 2:18c159179b08 | 164 | |
mcm | 2:18c159179b08 | 165 | mySerialNumber->ElectronicSerialNumber_MSB = ( ( cmd[0] << 24 ) | ( cmd[2] << 16 ) | ( cmd[4] << 8 ) | cmd[6] ); |
mcm | 2:18c159179b08 | 166 | |
mcm | 2:18c159179b08 | 167 | |
mcm | 2:18c159179b08 | 168 | // Read Electronic Serial Number. Second Access |
mcm | 2:18c159179b08 | 169 | cmd[0] = SI7021_READ_ELECTRONIC_ID_SECOND_BYTE_CMD1; |
mcm | 2:18c159179b08 | 170 | cmd[1] = SI7021_READ_ELECTRONIC_ID_SECOND_BYTE_CMD2; |
mcm | 2:18c159179b08 | 171 | |
mcm | 2:18c159179b08 | 172 | aux = _i2c.write ( _SI7021_Addr, &cmd[0], 2, true ); |
mcm | 2:18c159179b08 | 173 | aux = _i2c.read ( _SI7021_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); |
mcm | 2:18c159179b08 | 174 | |
mcm | 2:18c159179b08 | 175 | |
mcm | 2:18c159179b08 | 176 | mySerialNumber->ElectronicSerialNumber_LSB = ( ( cmd[0] << 24 ) | ( cmd[2] << 16 ) | ( cmd[4] << 8 ) | cmd[6] ); |
mcm | 2:18c159179b08 | 177 | |
mcm | 2:18c159179b08 | 178 | |
mcm | 2:18c159179b08 | 179 | |
mcm | 2:18c159179b08 | 180 | |
mcm | 2:18c159179b08 | 181 | if ( aux == I2C_SUCCESS ) |
mcm | 2:18c159179b08 | 182 | return SI7021_SUCCESS; |
mcm | 2:18c159179b08 | 183 | else |
mcm | 2:18c159179b08 | 184 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 185 | } |
mcm | 2:18c159179b08 | 186 | |
mcm | 2:18c159179b08 | 187 | |
mcm | 2:18c159179b08 | 188 | |
mcm | 2:18c159179b08 | 189 | /** |
mcm | 2:18c159179b08 | 190 | * @brief SI7021_GetFirmwareRevision ( SI7021_vector_data_t* ) |
mcm | 2:18c159179b08 | 191 | * |
mcm | 2:18c159179b08 | 192 | * @details It gets the firmware revision. |
mcm | 2:18c159179b08 | 193 | * |
mcm | 2:18c159179b08 | 194 | * @param[in] N/A |
mcm | 2:18c159179b08 | 195 | * |
mcm | 2:18c159179b08 | 196 | * @param[out] myFirmwareRevision: The firmware revision. |
mcm | 2:18c159179b08 | 197 | * |
mcm | 2:18c159179b08 | 198 | * |
mcm | 2:18c159179b08 | 199 | * @return Status of SI7021_GetFirmwareRevision. |
mcm | 2:18c159179b08 | 200 | * |
mcm | 2:18c159179b08 | 201 | * |
mcm | 2:18c159179b08 | 202 | * @author Manuel Caballero |
mcm | 2:18c159179b08 | 203 | * @date 5/February/2018 |
mcm | 2:18c159179b08 | 204 | * @version 5/February/2018 The ORIGIN |
mcm | 2:18c159179b08 | 205 | * @pre N/A. |
mcm | 2:18c159179b08 | 206 | * @warning N/A. |
mcm | 2:18c159179b08 | 207 | */ |
mcm | 2:18c159179b08 | 208 | SI7021::SI7021_status_t SI7021::SI7021_GetFirmwareRevision ( SI7021_vector_data_t* myFirmwareRevision ) |
mcm | 2:18c159179b08 | 209 | { |
mcm | 2:18c159179b08 | 210 | char cmd[] = { SI7021_READ_FIRMWARE_VERSION_CMD1, SI7021_READ_FIRMWARE_VERSION_CMD2 }; |
mcm | 2:18c159179b08 | 211 | uint32_t aux = 0; |
mcm | 2:18c159179b08 | 212 | |
mcm | 2:18c159179b08 | 213 | |
mcm | 2:18c159179b08 | 214 | // Read the firmware revision |
mcm | 2:18c159179b08 | 215 | aux = _i2c.write ( _SI7021_Addr, &cmd[0], 2, true ); |
mcm | 2:18c159179b08 | 216 | aux = _i2c.read ( _SI7021_Addr, &cmd[0], 1 ); |
mcm | 2:18c159179b08 | 217 | |
mcm | 2:18c159179b08 | 218 | |
mcm | 2:18c159179b08 | 219 | myFirmwareRevision->FirmwareRevision = cmd[0]; |
mcm | 2:18c159179b08 | 220 | |
mcm | 2:18c159179b08 | 221 | |
mcm | 2:18c159179b08 | 222 | |
mcm | 2:18c159179b08 | 223 | |
mcm | 2:18c159179b08 | 224 | if ( aux == I2C_SUCCESS ) |
mcm | 2:18c159179b08 | 225 | return SI7021_SUCCESS; |
mcm | 2:18c159179b08 | 226 | else |
mcm | 2:18c159179b08 | 227 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 228 | } |
mcm | 2:18c159179b08 | 229 | |
mcm | 2:18c159179b08 | 230 | |
mcm | 2:18c159179b08 | 231 | |
mcm | 2:18c159179b08 | 232 | /** |
mcm | 2:18c159179b08 | 233 | * @brief SI7021_SetHeaterCurrent ( char ) |
mcm | 2:18c159179b08 | 234 | * |
mcm | 2:18c159179b08 | 235 | * @details It sets the heater current. |
mcm | 2:18c159179b08 | 236 | * |
mcm | 2:18c159179b08 | 237 | * @param[in] myHeaterCurrent: New heater current value |
mcm | 2:18c159179b08 | 238 | * |
mcm | 2:18c159179b08 | 239 | * @param[out] N/A. |
mcm | 2:18c159179b08 | 240 | * |
mcm | 2:18c159179b08 | 241 | * |
mcm | 2:18c159179b08 | 242 | * @return Status of SI7021_SetHeaterCurrent. |
mcm | 2:18c159179b08 | 243 | * |
mcm | 2:18c159179b08 | 244 | * |
mcm | 2:18c159179b08 | 245 | * @author Manuel Caballero |
mcm | 2:18c159179b08 | 246 | * @date 5/February/2018 |
mcm | 2:18c159179b08 | 247 | * @version 5/February/2018 The ORIGIN |
mcm | 2:18c159179b08 | 248 | * @pre N/A. |
mcm | 2:18c159179b08 | 249 | * @warning N/A. |
mcm | 2:18c159179b08 | 250 | */ |
mcm | 2:18c159179b08 | 251 | SI7021::SI7021_status_t SI7021::SI7021_SetHeaterCurrent ( char myHeaterCurrent ) |
mcm | 2:18c159179b08 | 252 | { |
mcm | 2:18c159179b08 | 253 | char cmd[] = { SI7021_READ_HEATER_CONTROL_REGISTER, 0 }; |
mcm | 2:18c159179b08 | 254 | uint32_t aux = 0; |
mcm | 2:18c159179b08 | 255 | |
mcm | 2:18c159179b08 | 256 | |
mcm | 2:18c159179b08 | 257 | // myHeaterCurrent MUST be from 0 ( 0x00 ) to 15 ( 0x0F ) |
mcm | 2:18c159179b08 | 258 | if ( myHeaterCurrent <= 15 ) { |
mcm | 2:18c159179b08 | 259 | // Read the heater control register |
mcm | 2:18c159179b08 | 260 | aux = _i2c.write ( _SI7021_Addr, &cmd[0], 1, true ); |
mcm | 2:18c159179b08 | 261 | aux = _i2c.read ( _SI7021_Addr, &cmd[1], 1 ); |
mcm | 2:18c159179b08 | 262 | |
mcm | 2:18c159179b08 | 263 | |
mcm | 2:18c159179b08 | 264 | // Mask the data |
mcm | 2:18c159179b08 | 265 | cmd[1] &= 0xF0; |
mcm | 2:18c159179b08 | 266 | |
mcm | 2:18c159179b08 | 267 | // Update the value |
mcm | 2:18c159179b08 | 268 | cmd[0] = SI7021_WRITE_HEATER_CONTROL_REGISTER; |
mcm | 2:18c159179b08 | 269 | cmd[1] |= myHeaterCurrent; |
mcm | 2:18c159179b08 | 270 | |
mcm | 2:18c159179b08 | 271 | |
mcm | 2:18c159179b08 | 272 | aux = _i2c.write ( _SI7021_Addr, &cmd[0], 2, false ); |
mcm | 2:18c159179b08 | 273 | } else |
mcm | 2:18c159179b08 | 274 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 275 | |
mcm | 2:18c159179b08 | 276 | |
mcm | 2:18c159179b08 | 277 | |
mcm | 2:18c159179b08 | 278 | |
mcm | 2:18c159179b08 | 279 | if ( aux == I2C_SUCCESS ) |
mcm | 2:18c159179b08 | 280 | return SI7021_SUCCESS; |
mcm | 2:18c159179b08 | 281 | else |
mcm | 2:18c159179b08 | 282 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 283 | } |
mcm | 2:18c159179b08 | 284 | |
mcm | 2:18c159179b08 | 285 | |
mcm | 2:18c159179b08 | 286 | |
mcm | 2:18c159179b08 | 287 | /** |
mcm | 2:18c159179b08 | 288 | * @brief SI7021_TriggerTemperature ( SI7021_master_mode_t ) |
mcm | 2:18c159179b08 | 289 | * |
mcm | 2:18c159179b08 | 290 | * @details It performs a new temperature measurement. |
mcm | 2:18c159179b08 | 291 | * |
mcm | 2:18c159179b08 | 292 | * @param[in] myMode: HOLD/NO HOLD mode. |
mcm | 2:18c159179b08 | 293 | * |
mcm | 2:18c159179b08 | 294 | * @param[out] N/A |
mcm | 2:18c159179b08 | 295 | * |
mcm | 2:18c159179b08 | 296 | * |
mcm | 2:18c159179b08 | 297 | * @return Status of SI7021_TriggerTemperature. |
mcm | 2:18c159179b08 | 298 | * |
mcm | 2:18c159179b08 | 299 | * |
mcm | 2:18c159179b08 | 300 | * @author Manuel Caballero |
mcm | 2:18c159179b08 | 301 | * @date 5/February/2018 |
mcm | 2:18c159179b08 | 302 | * @version 5/February/2018 The ORIGIN |
mcm | 2:18c159179b08 | 303 | * @pre N/A. |
mcm | 2:18c159179b08 | 304 | * @warning The user MUST respect the total conversion time. |
mcm | 2:18c159179b08 | 305 | * 14-bit temperature: 7ms ( 10.8ms max ) |
mcm | 2:18c159179b08 | 306 | * 13-bit temperature: 4ms ( 6.2ms max ) |
mcm | 2:18c159179b08 | 307 | * 12-bit temperature: 2.4ms ( 3.8ms max ) |
mcm | 2:18c159179b08 | 308 | * 11-bit temperature: 1.5ms ( 2.4ms max ) |
mcm | 2:18c159179b08 | 309 | */ |
mcm | 2:18c159179b08 | 310 | SI7021::SI7021_status_t SI7021::SI7021_TriggerTemperature ( SI7021_master_mode_t myMode ) |
mcm | 2:18c159179b08 | 311 | { |
mcm | 2:18c159179b08 | 312 | char cmd = 0; |
mcm | 2:18c159179b08 | 313 | bool myI2C_stop = false; |
mcm | 2:18c159179b08 | 314 | uint32_t aux = 0; |
mcm | 2:18c159179b08 | 315 | |
mcm | 2:18c159179b08 | 316 | |
mcm | 2:18c159179b08 | 317 | |
mcm | 2:18c159179b08 | 318 | // Check the mode if it is HOLD MASTER MODE, then not generate a stop bit |
mcm | 2:18c159179b08 | 319 | if ( myMode == SI7021_HOLD_MASTER_MODE ) { |
mcm | 2:18c159179b08 | 320 | cmd = SI7021_MEASURE_TEMPERATURE_HOLD_MASTER_MODE; |
mcm | 2:18c159179b08 | 321 | myI2C_stop = true; |
mcm | 2:18c159179b08 | 322 | } else { |
mcm | 2:18c159179b08 | 323 | cmd = SI7021_MEASURE_TEMPERATURE_NO_HOLD_MASTER_MODE; |
mcm | 2:18c159179b08 | 324 | myI2C_stop = false; |
mcm | 2:18c159179b08 | 325 | } |
mcm | 2:18c159179b08 | 326 | |
mcm | 2:18c159179b08 | 327 | |
mcm | 2:18c159179b08 | 328 | |
mcm | 2:18c159179b08 | 329 | aux = _i2c.write ( _SI7021_Addr, &cmd, 1, myI2C_stop ); |
mcm | 2:18c159179b08 | 330 | |
mcm | 2:18c159179b08 | 331 | |
mcm | 2:18c159179b08 | 332 | // NOTE: The user has to respect the total conversion time! |
mcm | 2:18c159179b08 | 333 | |
mcm | 2:18c159179b08 | 334 | |
mcm | 2:18c159179b08 | 335 | if ( aux == I2C_SUCCESS ) |
mcm | 2:18c159179b08 | 336 | return SI7021_SUCCESS; |
mcm | 2:18c159179b08 | 337 | else |
mcm | 2:18c159179b08 | 338 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 339 | } |
mcm | 2:18c159179b08 | 340 | |
mcm | 2:18c159179b08 | 341 | |
mcm | 2:18c159179b08 | 342 | |
mcm | 2:18c159179b08 | 343 | /** |
mcm | 2:18c159179b08 | 344 | * @brief SI7021_ReadTemperature ( SI7021_vector_data_t* ) |
mcm | 2:18c159179b08 | 345 | * |
mcm | 2:18c159179b08 | 346 | * @details It reads the temperature. |
mcm | 2:18c159179b08 | 347 | * |
mcm | 2:18c159179b08 | 348 | * @param[in] myMode: HOLD/NO HOLD mode. |
mcm | 2:18c159179b08 | 349 | * |
mcm | 2:18c159179b08 | 350 | * @param[out] myTemperature: The current temperature |
mcm | 2:18c159179b08 | 351 | * |
mcm | 2:18c159179b08 | 352 | * |
mcm | 2:18c159179b08 | 353 | * @return Status of SI7021_ReadTemperature. |
mcm | 2:18c159179b08 | 354 | * |
mcm | 2:18c159179b08 | 355 | * |
mcm | 2:18c159179b08 | 356 | * @author Manuel Caballero |
mcm | 2:18c159179b08 | 357 | * @date 5/February/2018 |
mcm | 2:18c159179b08 | 358 | * @version 5/February/2018 The ORIGIN |
mcm | 2:18c159179b08 | 359 | * @pre SI7021_TriggerTemperature MUST be called first. This function does NOT |
mcm | 2:18c159179b08 | 360 | * read CRC byte. |
mcm | 2:18c159179b08 | 361 | * @warning N/A. |
mcm | 2:18c159179b08 | 362 | */ |
mcm | 2:18c159179b08 | 363 | SI7021::SI7021_status_t SI7021::SI7021_ReadTemperature ( SI7021_vector_data_t* myTemperature ) |
mcm | 2:18c159179b08 | 364 | { |
mcm | 2:18c159179b08 | 365 | char cmd[] = { 0, 0 }; |
mcm | 2:18c159179b08 | 366 | uint32_t aux = 0; |
mcm | 2:18c159179b08 | 367 | |
mcm | 2:18c159179b08 | 368 | |
mcm | 2:18c159179b08 | 369 | |
mcm | 2:18c159179b08 | 370 | |
mcm | 2:18c159179b08 | 371 | aux = _i2c.read ( _SI7021_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); |
mcm | 2:18c159179b08 | 372 | |
mcm | 2:18c159179b08 | 373 | |
mcm | 2:18c159179b08 | 374 | // Check if the is a valid data |
mcm | 2:18c159179b08 | 375 | if ( ( cmd[1] & 0x02 ) == 0x00 ) { |
mcm | 2:18c159179b08 | 376 | // Parse the data |
mcm | 2:18c159179b08 | 377 | myTemperature->Temperature = ( ( cmd[0] << 8 ) | cmd[1] ); |
mcm | 2:18c159179b08 | 378 | myTemperature->Temperature *= 175.72; |
mcm | 2:18c159179b08 | 379 | myTemperature->Temperature /= 65536.0; |
mcm | 2:18c159179b08 | 380 | myTemperature->Temperature -= 46.85; |
mcm | 2:18c159179b08 | 381 | } else |
mcm | 2:18c159179b08 | 382 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 383 | |
mcm | 2:18c159179b08 | 384 | |
mcm | 2:18c159179b08 | 385 | |
mcm | 2:18c159179b08 | 386 | |
mcm | 2:18c159179b08 | 387 | |
mcm | 2:18c159179b08 | 388 | if ( aux == I2C_SUCCESS ) |
mcm | 2:18c159179b08 | 389 | return SI7021_SUCCESS; |
mcm | 2:18c159179b08 | 390 | else |
mcm | 2:18c159179b08 | 391 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 392 | } |
mcm | 2:18c159179b08 | 393 | |
mcm | 2:18c159179b08 | 394 | |
mcm | 2:18c159179b08 | 395 | |
mcm | 2:18c159179b08 | 396 | /** |
mcm | 2:18c159179b08 | 397 | * @brief SI7021_ReadRawTemperatureFromRH ( SI7021_vector_data_t* ) |
mcm | 2:18c159179b08 | 398 | * |
mcm | 2:18c159179b08 | 399 | * @details It reads the raw temperature. |
mcm | 2:18c159179b08 | 400 | * |
mcm | 2:18c159179b08 | 401 | * @param[in] N/A. |
mcm | 2:18c159179b08 | 402 | * |
mcm | 2:18c159179b08 | 403 | * @param[out] myTemperature: The current temperature |
mcm | 2:18c159179b08 | 404 | * |
mcm | 2:18c159179b08 | 405 | * |
mcm | 2:18c159179b08 | 406 | * @return Status of SI7021_ReadRawTemperatureFromRH. |
mcm | 2:18c159179b08 | 407 | * |
mcm | 2:18c159179b08 | 408 | * |
mcm | 2:18c159179b08 | 409 | * @author Manuel Caballero |
mcm | 2:18c159179b08 | 410 | * @date 5/February/2018 |
mcm | 2:18c159179b08 | 411 | * @version 5/February/2018 The ORIGIN |
mcm | 2:18c159179b08 | 412 | * @pre SI7021_TriggerHumidity MUST be called first. |
mcm | 2:18c159179b08 | 413 | * @warning N/A. |
mcm | 2:18c159179b08 | 414 | */ |
mcm | 2:18c159179b08 | 415 | SI7021::SI7021_status_t SI7021::SI7021_ReadRawTemperatureFromRH ( SI7021_vector_data_t* myTemperature ) |
mcm | 2:18c159179b08 | 416 | { |
mcm | 2:18c159179b08 | 417 | char cmd[] = { SI7021_READ_TEMPERATURE_VALUE_FROM_PREVIOUS_RH_MEASUREMENT, 0 }; |
mcm | 2:18c159179b08 | 418 | uint32_t aux = 0; |
mcm | 2:18c159179b08 | 419 | |
mcm | 2:18c159179b08 | 420 | |
mcm | 2:18c159179b08 | 421 | |
mcm | 2:18c159179b08 | 422 | aux = _i2c.write ( _SI7021_Addr, &cmd[0], 1, true ); |
mcm | 2:18c159179b08 | 423 | aux = _i2c.read ( _SI7021_Addr, &cmd[0], 2 ); |
mcm | 2:18c159179b08 | 424 | |
mcm | 2:18c159179b08 | 425 | |
mcm | 2:18c159179b08 | 426 | // Check if the is a valid data |
mcm | 2:18c159179b08 | 427 | if ( ( cmd[1] & 0x02 ) == 0x00 ) { |
mcm | 2:18c159179b08 | 428 | // Parse the data |
mcm | 2:18c159179b08 | 429 | myTemperature->Temperature = ( ( cmd[0] << 8 ) | cmd[1] ); |
mcm | 2:18c159179b08 | 430 | } else |
mcm | 2:18c159179b08 | 431 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 432 | |
mcm | 2:18c159179b08 | 433 | |
mcm | 2:18c159179b08 | 434 | |
mcm | 2:18c159179b08 | 435 | |
mcm | 2:18c159179b08 | 436 | if ( aux == I2C_SUCCESS ) |
mcm | 2:18c159179b08 | 437 | return SI7021_SUCCESS; |
mcm | 2:18c159179b08 | 438 | else |
mcm | 2:18c159179b08 | 439 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 440 | } |
mcm | 2:18c159179b08 | 441 | |
mcm | 2:18c159179b08 | 442 | |
mcm | 2:18c159179b08 | 443 | |
mcm | 2:18c159179b08 | 444 | /** |
mcm | 2:18c159179b08 | 445 | * @brief SI7021_ReadTemperatureFromRH ( SI7021_vector_data_t* ) |
mcm | 2:18c159179b08 | 446 | * |
mcm | 2:18c159179b08 | 447 | * @details It reads the temperature. |
mcm | 2:18c159179b08 | 448 | * |
mcm | 2:18c159179b08 | 449 | * @param[in] N/A. |
mcm | 2:18c159179b08 | 450 | * |
mcm | 2:18c159179b08 | 451 | * @param[out] myTemperature: The current temperature |
mcm | 2:18c159179b08 | 452 | * |
mcm | 2:18c159179b08 | 453 | * |
mcm | 2:18c159179b08 | 454 | * @return Status of SI7021_ReadTemperatureFromRH. |
mcm | 2:18c159179b08 | 455 | * |
mcm | 2:18c159179b08 | 456 | * |
mcm | 2:18c159179b08 | 457 | * @author Manuel Caballero |
mcm | 2:18c159179b08 | 458 | * @date 5/February/2018 |
mcm | 2:18c159179b08 | 459 | * @version 5/February/2018 The ORIGIN |
mcm | 2:18c159179b08 | 460 | * @pre SI7021_TriggerHumidity MUST be called first. |
mcm | 2:18c159179b08 | 461 | * @warning N/A. |
mcm | 2:18c159179b08 | 462 | */ |
mcm | 2:18c159179b08 | 463 | SI7021::SI7021_status_t SI7021::SI7021_ReadTemperatureFromRH ( SI7021_vector_data_t* myTemperature ) |
mcm | 2:18c159179b08 | 464 | { |
mcm | 2:18c159179b08 | 465 | char cmd[] = { SI7021_READ_TEMPERATURE_VALUE_FROM_PREVIOUS_RH_MEASUREMENT, 0 }; |
mcm | 2:18c159179b08 | 466 | uint32_t aux = 0; |
mcm | 2:18c159179b08 | 467 | |
mcm | 2:18c159179b08 | 468 | |
mcm | 2:18c159179b08 | 469 | |
mcm | 2:18c159179b08 | 470 | aux = _i2c.write ( _SI7021_Addr, &cmd[0], 1, true ); |
mcm | 2:18c159179b08 | 471 | aux = _i2c.read ( _SI7021_Addr, &cmd[0], 2 ); |
mcm | 2:18c159179b08 | 472 | |
mcm | 2:18c159179b08 | 473 | |
mcm | 2:18c159179b08 | 474 | // Check if the is a valid data |
mcm | 2:18c159179b08 | 475 | if ( ( cmd[1] & 0x02 ) == 0x00 ) { |
mcm | 2:18c159179b08 | 476 | // Parse the data |
mcm | 2:18c159179b08 | 477 | myTemperature->Temperature = ( ( cmd[0] << 8 ) | cmd[1] ); |
mcm | 2:18c159179b08 | 478 | myTemperature->Temperature *= 175.72; |
mcm | 2:18c159179b08 | 479 | myTemperature->Temperature /= 65536.0; |
mcm | 2:18c159179b08 | 480 | myTemperature->Temperature -= 46.85; |
mcm | 2:18c159179b08 | 481 | } else |
mcm | 2:18c159179b08 | 482 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 483 | |
mcm | 2:18c159179b08 | 484 | |
mcm | 2:18c159179b08 | 485 | |
mcm | 2:18c159179b08 | 486 | |
mcm | 2:18c159179b08 | 487 | if ( aux == I2C_SUCCESS ) |
mcm | 2:18c159179b08 | 488 | return SI7021_SUCCESS; |
mcm | 2:18c159179b08 | 489 | else |
mcm | 2:18c159179b08 | 490 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 491 | } |
mcm | 2:18c159179b08 | 492 | |
mcm | 2:18c159179b08 | 493 | |
mcm | 2:18c159179b08 | 494 | |
mcm | 2:18c159179b08 | 495 | /** |
mcm | 2:18c159179b08 | 496 | * @brief SI7021_TriggerHumidity ( SI7021_master_mode_t ) |
mcm | 2:18c159179b08 | 497 | * |
mcm | 2:18c159179b08 | 498 | * @details It performs a new relative humidity measurement. |
mcm | 2:18c159179b08 | 499 | * |
mcm | 2:18c159179b08 | 500 | * @param[in] myMode: HOLD/NO HOLD MASTER mode. |
mcm | 2:18c159179b08 | 501 | * |
mcm | 2:18c159179b08 | 502 | * @param[out] N/A |
mcm | 2:18c159179b08 | 503 | * |
mcm | 2:18c159179b08 | 504 | * |
mcm | 2:18c159179b08 | 505 | * @return Status of SI7021_TriggerHumidity. |
mcm | 2:18c159179b08 | 506 | * |
mcm | 2:18c159179b08 | 507 | * |
mcm | 2:18c159179b08 | 508 | * @author Manuel Caballero |
mcm | 2:18c159179b08 | 509 | * @date 5/February/2018 |
mcm | 2:18c159179b08 | 510 | * @version 5/February/2018 The ORIGIN |
mcm | 2:18c159179b08 | 511 | * @pre Initiating a RH measurement will also automatically initiate a temperature measurement. |
mcm | 2:18c159179b08 | 512 | * The total conversion time will be tCONV(RH) + tCONV(T). |
mcm | 2:18c159179b08 | 513 | * @warning The user MUST respect the total conversion time. |
mcm | 2:18c159179b08 | 514 | * 12-bit RH: 10ms ( 12ms max ) |
mcm | 2:18c159179b08 | 515 | * 11-bit RH: 5.8ms ( 7ms max ) |
mcm | 2:18c159179b08 | 516 | * 10-bit RH: 3.7ms ( 4.5ms max ) |
mcm | 2:18c159179b08 | 517 | * 8-bit RH: 2.6ms ( 3.1ms max ) |
mcm | 2:18c159179b08 | 518 | */ |
mcm | 2:18c159179b08 | 519 | SI7021::SI7021_status_t SI7021::SI7021_TriggerHumidity ( SI7021_master_mode_t myMode ) |
mcm | 2:18c159179b08 | 520 | { |
mcm | 2:18c159179b08 | 521 | char cmd = myMode; |
mcm | 2:18c159179b08 | 522 | uint32_t aux = 0; |
mcm | 2:18c159179b08 | 523 | bool myI2C_stop = false; |
mcm | 2:18c159179b08 | 524 | |
mcm | 2:18c159179b08 | 525 | |
mcm | 2:18c159179b08 | 526 | |
mcm | 2:18c159179b08 | 527 | // Check the mode if it is HOLD MASTER MODE, then not generate a stop bit |
mcm | 2:18c159179b08 | 528 | if ( myMode == SI7021_HOLD_MASTER_MODE ) { |
mcm | 2:18c159179b08 | 529 | cmd = SI7021_MEASURE_RELATIVE_HUMIDITY_HOLD_MASTER_MODE; |
mcm | 2:18c159179b08 | 530 | myI2C_stop = true; |
mcm | 2:18c159179b08 | 531 | } else { |
mcm | 2:18c159179b08 | 532 | cmd = SI7021_MEASURE_RELATIVE_HUMIDITY_NO_HOLD_MASTER_MODE; |
mcm | 2:18c159179b08 | 533 | myI2C_stop = false; |
mcm | 2:18c159179b08 | 534 | } |
mcm | 2:18c159179b08 | 535 | |
mcm | 2:18c159179b08 | 536 | |
mcm | 2:18c159179b08 | 537 | aux = _i2c.write ( _SI7021_Addr, &cmd, 1, myI2C_stop ); |
mcm | 2:18c159179b08 | 538 | |
mcm | 2:18c159179b08 | 539 | |
mcm | 2:18c159179b08 | 540 | // NOTE: The user has to respect the total conversion time! |
mcm | 2:18c159179b08 | 541 | |
mcm | 2:18c159179b08 | 542 | |
mcm | 2:18c159179b08 | 543 | if ( aux == I2C_SUCCESS ) |
mcm | 2:18c159179b08 | 544 | return SI7021_SUCCESS; |
mcm | 2:18c159179b08 | 545 | else |
mcm | 2:18c159179b08 | 546 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 547 | } |
mcm | 2:18c159179b08 | 548 | |
mcm | 2:18c159179b08 | 549 | |
mcm | 2:18c159179b08 | 550 | |
mcm | 2:18c159179b08 | 551 | /** |
mcm | 2:18c159179b08 | 552 | * @brief SI7021_ReadHumidity ( SI7021_vector_data_t* ) |
mcm | 2:18c159179b08 | 553 | * |
mcm | 2:18c159179b08 | 554 | * @details It reads the relative humidity. |
mcm | 2:18c159179b08 | 555 | * |
mcm | 2:18c159179b08 | 556 | * @param[in] N/A. |
mcm | 2:18c159179b08 | 557 | * |
mcm | 2:18c159179b08 | 558 | * @param[out] myHumidity: The current HUMIDITY |
mcm | 2:18c159179b08 | 559 | * |
mcm | 2:18c159179b08 | 560 | * |
mcm | 2:18c159179b08 | 561 | * @return Status of SI7021_ReadHumidity. |
mcm | 2:18c159179b08 | 562 | * |
mcm | 2:18c159179b08 | 563 | * |
mcm | 2:18c159179b08 | 564 | * @author Manuel Caballero |
mcm | 2:18c159179b08 | 565 | * @date 5/February/2018 |
mcm | 2:18c159179b08 | 566 | * @version 5/February/2018 The ORIGIN |
mcm | 2:18c159179b08 | 567 | * @pre SI7021_TriggerHumidity MUST be called first. This function does NOT |
mcm | 2:18c159179b08 | 568 | * read CRC byte. |
mcm | 2:18c159179b08 | 569 | * @warning N/A. |
mcm | 2:18c159179b08 | 570 | */ |
mcm | 2:18c159179b08 | 571 | SI7021::SI7021_status_t SI7021::SI7021_ReadHumidity ( SI7021_vector_data_t* myHumidity ) |
mcm | 2:18c159179b08 | 572 | { |
mcm | 2:18c159179b08 | 573 | char cmd[] = { 0, 0 }; |
mcm | 2:18c159179b08 | 574 | uint32_t aux = 0; |
mcm | 2:18c159179b08 | 575 | |
mcm | 2:18c159179b08 | 576 | |
mcm | 2:18c159179b08 | 577 | |
mcm | 2:18c159179b08 | 578 | aux = _i2c.read ( _SI7021_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); |
mcm | 2:18c159179b08 | 579 | |
mcm | 2:18c159179b08 | 580 | |
mcm | 2:18c159179b08 | 581 | // Check if the is a valid data |
mcm | 2:18c159179b08 | 582 | if ( ( cmd[1] & 0x03 ) == 0x02 ) { |
mcm | 2:18c159179b08 | 583 | // Parse the data |
mcm | 2:18c159179b08 | 584 | myHumidity->RelativeHumidity = ( ( cmd[0] << 8 ) | cmd[1] ); |
mcm | 2:18c159179b08 | 585 | myHumidity->RelativeHumidity *= 125.0; |
mcm | 2:18c159179b08 | 586 | myHumidity->RelativeHumidity /= 65536.0; |
mcm | 2:18c159179b08 | 587 | myHumidity->RelativeHumidity -= 6.0; |
mcm | 2:18c159179b08 | 588 | } else |
mcm | 2:18c159179b08 | 589 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 590 | |
mcm | 2:18c159179b08 | 591 | |
mcm | 2:18c159179b08 | 592 | |
mcm | 2:18c159179b08 | 593 | |
mcm | 2:18c159179b08 | 594 | if ( aux == I2C_SUCCESS ) |
mcm | 2:18c159179b08 | 595 | return SI7021_SUCCESS; |
mcm | 2:18c159179b08 | 596 | else |
mcm | 2:18c159179b08 | 597 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 598 | } |
mcm | 2:18c159179b08 | 599 | |
mcm | 2:18c159179b08 | 600 | |
mcm | 2:18c159179b08 | 601 | |
mcm | 2:18c159179b08 | 602 | /** |
mcm | 2:18c159179b08 | 603 | * @brief SI7021_ReadRawHumidity ( SI7021_vector_data_t* ) |
mcm | 2:18c159179b08 | 604 | * |
mcm | 2:18c159179b08 | 605 | * @details It reads the raw relative humidity. |
mcm | 2:18c159179b08 | 606 | * |
mcm | 2:18c159179b08 | 607 | * @param[in] N/A. |
mcm | 2:18c159179b08 | 608 | * |
mcm | 2:18c159179b08 | 609 | * @param[out] myHumidity: The current HUMIDITY |
mcm | 2:18c159179b08 | 610 | * |
mcm | 2:18c159179b08 | 611 | * |
mcm | 2:18c159179b08 | 612 | * @return Status of SI7021_ReadRawHumidity. |
mcm | 2:18c159179b08 | 613 | * |
mcm | 2:18c159179b08 | 614 | * |
mcm | 2:18c159179b08 | 615 | * @author Manuel Caballero |
mcm | 2:18c159179b08 | 616 | * @date 5/February/2018 |
mcm | 2:18c159179b08 | 617 | * @version 5/February/2018 The ORIGIN |
mcm | 2:18c159179b08 | 618 | * @pre SI7021_TriggerHumidity MUST be called first. This function does NOT |
mcm | 2:18c159179b08 | 619 | * read CRC byte. |
mcm | 2:18c159179b08 | 620 | * @warning N/A. |
mcm | 2:18c159179b08 | 621 | */ |
mcm | 2:18c159179b08 | 622 | SI7021::SI7021_status_t SI7021::SI7021_ReadRawHumidity ( SI7021_vector_data_t* myHumidity ) |
mcm | 2:18c159179b08 | 623 | { |
mcm | 2:18c159179b08 | 624 | char cmd[] = { 0, 0 }; |
mcm | 2:18c159179b08 | 625 | uint32_t aux = 0; |
mcm | 2:18c159179b08 | 626 | |
mcm | 2:18c159179b08 | 627 | |
mcm | 2:18c159179b08 | 628 | |
mcm | 2:18c159179b08 | 629 | aux = _i2c.read ( _SI7021_Addr, &cmd[0], sizeof( cmd )/sizeof( cmd[0] ) ); |
mcm | 2:18c159179b08 | 630 | |
mcm | 2:18c159179b08 | 631 | |
mcm | 2:18c159179b08 | 632 | // Check if the is a valid data |
mcm | 2:18c159179b08 | 633 | if ( ( cmd[1] & 0x03 ) == 0x02 ) { |
mcm | 2:18c159179b08 | 634 | // Parse the data |
mcm | 2:18c159179b08 | 635 | myHumidity->RelativeHumidity = ( ( cmd[0] << 8 ) | cmd[1] ); |
mcm | 2:18c159179b08 | 636 | } else |
mcm | 2:18c159179b08 | 637 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 638 | |
mcm | 2:18c159179b08 | 639 | |
mcm | 2:18c159179b08 | 640 | |
mcm | 2:18c159179b08 | 641 | |
mcm | 2:18c159179b08 | 642 | if ( aux == I2C_SUCCESS ) |
mcm | 2:18c159179b08 | 643 | return SI7021_SUCCESS; |
mcm | 2:18c159179b08 | 644 | else |
mcm | 2:18c159179b08 | 645 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 646 | } |
mcm | 2:18c159179b08 | 647 | |
mcm | 2:18c159179b08 | 648 | |
mcm | 2:18c159179b08 | 649 | |
mcm | 2:18c159179b08 | 650 | /** |
mcm | 2:18c159179b08 | 651 | * @brief SI7021_GetBatteryStatus ( SI7021_vector_data_t* ) |
mcm | 2:18c159179b08 | 652 | * |
mcm | 2:18c159179b08 | 653 | * @details It reads the raw relative humidity. |
mcm | 2:18c159179b08 | 654 | * |
mcm | 2:18c159179b08 | 655 | * @param[in] N/A. |
mcm | 2:18c159179b08 | 656 | * |
mcm | 2:18c159179b08 | 657 | * @param[out] myBatteryStatus: The current battery status |
mcm | 2:18c159179b08 | 658 | * |
mcm | 2:18c159179b08 | 659 | * |
mcm | 2:18c159179b08 | 660 | * @return Status of SI7021_GetBatteryStatus. |
mcm | 2:18c159179b08 | 661 | * |
mcm | 2:18c159179b08 | 662 | * |
mcm | 2:18c159179b08 | 663 | * @author Manuel Caballero |
mcm | 2:18c159179b08 | 664 | * @date 5/February/2018 |
mcm | 2:18c159179b08 | 665 | * @version 5/February/2018 The ORIGIN |
mcm | 2:18c159179b08 | 666 | * @pre N/A. |
mcm | 2:18c159179b08 | 667 | * @warning N/A. |
mcm | 2:18c159179b08 | 668 | */ |
mcm | 2:18c159179b08 | 669 | SI7021::SI7021_status_t SI7021::SI7021_GetBatteryStatus ( SI7021_vector_data_t* myBatteryStatus ) |
mcm | 2:18c159179b08 | 670 | { |
mcm | 2:18c159179b08 | 671 | char cmd = SI7021_READ_RH_T_USER_REGISTER_1; |
mcm | 2:18c159179b08 | 672 | uint32_t aux = 0; |
mcm | 2:18c159179b08 | 673 | |
mcm | 2:18c159179b08 | 674 | |
mcm | 2:18c159179b08 | 675 | aux = _i2c.write ( _SI7021_Addr, &cmd, 1, true ); |
mcm | 2:18c159179b08 | 676 | aux = _i2c.read ( _SI7021_Addr, &cmd, 1 ); |
mcm | 2:18c159179b08 | 677 | |
mcm | 2:18c159179b08 | 678 | |
mcm | 2:18c159179b08 | 679 | myBatteryStatus->BatteryStatus = ( SI7021_vdds_status_t )( cmd & SI7021_VDDS_STATUS_MASK ); |
mcm | 2:18c159179b08 | 680 | |
mcm | 2:18c159179b08 | 681 | |
mcm | 2:18c159179b08 | 682 | |
mcm | 2:18c159179b08 | 683 | |
mcm | 2:18c159179b08 | 684 | |
mcm | 2:18c159179b08 | 685 | if ( aux == I2C_SUCCESS ) |
mcm | 2:18c159179b08 | 686 | return SI7021_SUCCESS; |
mcm | 2:18c159179b08 | 687 | else |
mcm | 2:18c159179b08 | 688 | return SI7021_FAILURE; |
mcm | 2:18c159179b08 | 689 | } |