Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
SHT3X.h
00001 /** 00002 * @brief SHT3X.h 00003 * @details Humidity and Temperature Sensor. 00004 * Header file. 00005 * 00006 * 00007 * @return N/A 00008 * 00009 * @author Manuel Caballero 00010 * @date 25/March/2021 00011 * @version 25/March/2021 The ORIGIN 00012 * @pre N/A 00013 * @warning N/A 00014 * @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ). 00015 */ 00016 #ifndef SHT3X_H_ 00017 #define SHT3X_H_ 00018 00019 #include "mbed.h" 00020 00021 00022 /** 00023 Example: 00024 00025 @code 00026 #include "mbed.h" 00027 #include "SHT3X.h" 00028 00029 SHT3X mySHT3X ( I2C_SDA, I2C_SCL, SHT3X::SHT3X_ADDRESS_B, 400000 ); // I2C_SDA | I2C_SCL 00030 Serial pc ( USBTX, USBRX ); // tx, rx 00031 00032 DigitalOut myled ( LED1 ); 00033 Ticker newAction; 00034 00035 00036 //@brief Constants. 00037 00038 00039 //@brief Variables. 00040 volatile uint32_t myState; // State that indicates when to perform a new sample 00041 00042 00043 //@brief FUNCTION PROTOTYPES 00044 void changeDATA ( void ); 00045 00046 00047 //@brief FUNCTION FOR APPLICATION MAIN ENTRY. 00048 int main() 00049 { 00050 SHT3X::SHT3X_status_t aux; 00051 SHT3X::SHT3X_data_t mySHT3X_Data; 00052 00053 pc.baud ( 115200 ); 00054 00055 myled = 1; 00056 wait(3); 00057 myled = 0; 00058 00059 // Set a software reset 00060 aux = mySHT3X.SHT3X_SetSoftReset (); 00061 wait_ms(2U); 00062 00063 // Clear the STATUS register 00064 aux = mySHT3X.SHT3X_ClearStatus (); 00065 00066 // Disable the Heater 00067 aux = mySHT3X.SHT3X_SetHeater ( SHT3X::SHT3X_HEATER_DISABLE ); 00068 00069 // Do not perform periodic measurement 00070 aux = mySHT3X.SHT3X_SetBreakCommand (); 00071 00072 myState = 0UL; // Reset the variable 00073 newAction.attach( &changeDATA, 1U ); // the address of the function to be attached ( changeDATA ) and the interval ( 1s ) 00074 00075 // Let the callbacks take care of everything 00076 while(1) { 00077 sleep(); 00078 00079 if ( myState == 1UL ) { 00080 myled = 1U; 00081 00082 // Trigger to get a new data set, no clock stretching and repeatibility high 00083 aux = mySHT3X.SHT3X_OneShotTriggerAllData ( SHT3X::SHT3X_CLOCK_STRETCHING_DISABLED_REPEATABILITY_HIGH ); 00084 wait_ms(15U); 00085 00086 // Get all the data 00087 aux = mySHT3X.SHT3X_OneShotGetAllRawData ( &mySHT3X_Data.rawData ); 00088 00089 00090 // Process all the data 00091 mySHT3X.SHT3X_ProccessData ( mySHT3X_Data.rawData, &mySHT3X_Data.data ); 00092 00093 // Send data through the UART 00094 pc.printf ( "T: %0.2f C, RH: %0.2f %%\r\n", mySHT3X_Data.data.temperature, mySHT3X_Data.data.relativeHumidity ); 00095 00096 00097 // Reset the variables 00098 myState = 0UL; 00099 myled = 0U; 00100 } 00101 } 00102 } 00103 00104 00105 // @brief changeDATA ( void ) 00106 // 00107 // @details It changes myState variable 00108 // 00109 // @param[in] N/A 00110 // 00111 // @param[out] N/A. 00112 // 00113 // @return N/A. 00114 // 00115 // @author Manuel Caballero 00116 // @date 25/March/2021 00117 // @version 25/March/2021 The ORIGIN 00118 // @pre N/A 00119 // @warning N/A. 00120 void changeDATA ( void ) 00121 { 00122 myState = 1UL; 00123 } 00124 @endcode 00125 */ 00126 00127 00128 /*! 00129 Library for the SHT3X Humidity and Temperature Sensor. 00130 */ 00131 class SHT3X 00132 { 00133 public: 00134 /** 00135 * @brief DEFAULT ADDRESSES 00136 */ 00137 typedef enum { 00138 SHT3X_ADDRESS_A = ( 0x44 << 1U ), /*!< SHT3X ADDR pin connected to logic low */ 00139 SHT3X_ADDRESS_B = ( 0x45 << 1U ) /*!< SHT3X ADDR pin connected to logic high */ 00140 } SHT3X_address_t; 00141 00142 00143 00144 /** 00145 * @brief COMMAND REGISTERS 00146 */ 00147 typedef enum { 00148 SHT3X_CLOCK_STRETCHING_ENABLED_REPEATABILITY_HIGH = 0x2C06, /*!< High repeatability measurement with clock stretching enabled */ 00149 SHT3X_CLOCK_STRETCHING_ENABLED_REPEATABILITY_MEDIUM = 0x2C0D, /*!< Medium repeatability measurement with clock stretching enabled */ 00150 SHT3X_CLOCK_STRETCHING_ENABLED_REPEATABILITY_LOW = 0x2C10, /*!< Low repeatability measurement with clock stretching enabled */ 00151 00152 SHT3X_CLOCK_STRETCHING_DISABLED_REPEATABILITY_HIGH = 0x2400, /*!< High repeatability measurement with clock stretching disabled */ 00153 SHT3X_CLOCK_STRETCHING_DISABLED_REPEATABILITY_MEDIUM = 0x240B, /*!< Medium repeatability measurement with clock stretching disabled */ 00154 SHT3X_CLOCK_STRETCHING_DISABLED_REPEATABILITY_LOW = 0x2416, /*!< Low repeatability measurement with clock stretching disabled */ 00155 } SHT3X_command_registers_single_shot_mode_t; 00156 00157 00158 typedef enum { 00159 SHT3X_HEATER_ENABLE = 0x306D, /*!< Heater enable command */ 00160 SHT3X_HEATER_DISABLE = 0x3066, /*!< Heater disable command */ 00161 } SHT3X_command_registers_heater_t ; 00162 00163 00164 typedef enum { 00165 SHT3X_MPS_0_5_REPEATABILITY_HIGH = 0x2032, /*!< High repeatability 0.5 measurement per second */ 00166 SHT3X_MPS_0_5_REPEATABILITY_MEDIUM = 0x2024, /*!< Medium repeatability 0.5 measurement per second */ 00167 SHT3X_MPS_0_5_REPEATABILITY_LOW = 0x202F, /*!< Low repeatability 0.5 measurement per second */ 00168 00169 SHT3X_MPS_1_REPEATABILITY_HIGH = 0x2130, /*!< High repeatability 1 measurement per second */ 00170 SHT3X_MPS_1_REPEATABILITY_MEDIUM = 0x2126, /*!< Medium repeatability 1 measurement per second */ 00171 SHT3X_MPS_1_REPEATABILITY_LOW = 0x212D, /*!< Low repeatability 1 measurement per second */ 00172 00173 SHT3X_MPS_2_REPEATABILITY_HIGH = 0x2236, /*!< High repeatability 2 measurement per second */ 00174 SHT3X_MPS_2_REPEATABILITY_MEDIUM = 0x2220, /*!< Medium repeatability 2 measurement per second */ 00175 SHT3X_MPS_2_REPEATABILITY_LOW = 0x222B, /*!< Low repeatability 2 measurement per second */ 00176 00177 SHT3X_MPS_4_REPEATABILITY_HIGH = 0x2334, /*!< High repeatability 4 measurement per second */ 00178 SHT3X_MPS_4_REPEATABILITY_MEDIUM = 0x2322, /*!< Medium repeatability 4 measurement per second */ 00179 SHT3X_MPS_4_REPEATABILITY_LOW = 0x2329, /*!< Low repeatability 4 measurement per second */ 00180 00181 SHT3X_MPS_10_REPEATABILITY_HIGH = 0x2737, /*!< High repeatability 10 measurement per second */ 00182 SHT3X_MPS_10_REPEATABILITY_MEDIUM = 0x2721, /*!< Medium repeatability 10 measurement per second */ 00183 SHT3X_MPS_10_REPEATABILITY_LOW = 0x272A, /*!< Low repeatability 10 measurement per second */ 00184 } SHT3X_command_registers_periodic_data_mode_t ; 00185 00186 00187 typedef enum { 00188 SHT3X_FETCH_DATA = 0xE000, /*!< Fetch data command */ 00189 SHT3X_PERIODIC_MESUREMENT_WITH_ART = 0x2B32, /*!< ART command */ 00190 SHT3X_BREAK = 0x3093, /*!< Break command */ 00191 SHT3X_SOFT_RESET = 0x30A2, /*!< Software reset command */ 00192 SHT3X_STATUS_REGISTER = 0xF32D, /*!< Status command */ 00193 SHT3X_CLEAR_STATUS_REGISTER = 0x3041 /*!< Clear Status register command */ 00194 } SHT3X_command_registers_t ; 00195 00196 00197 00198 // GENERAL CALL 00199 /** 00200 * @brief RESET 00201 */ 00202 typedef enum { 00203 SHT3X_GENERAL_CALL_RESET_ADDRESS_BYTE = 0x00, /*!< Reset. Address byte */ 00204 SHT3X_GENERAL_CALL_RESET_SECOND_BYTE = 0x06 /*!< Reset. Second byte */ 00205 } SHT3X_general_call_t; 00206 00207 00208 00209 /** 00210 * @brief STATUS REGISTER. 00211 * NOTE: N/A. 00212 */ 00213 /* ALERT_PENDING_STATUS <15> 00214 * NOTE: N/A. 00215 */ 00216 typedef enum { 00217 STATUS_ALERT_PENDING_STATUS_MASK = ( 1U << 15U ), /*!< ALERT_PENDING_STATUS mask */ 00218 STATUS_ALERT_PENDING_STATUS_NO_PENDING_ALERTS = ( 0U << 15U ), /*!< No pending alerts */ 00219 STATUS_ALERT_PENDING_STATUS_AT_LEAST_ONE_PENDING_ALERT = ( 1U << 15U ) /*!< At least one pending alert [Default] */ 00220 } SHT3X_status_alert_pending_status_t; 00221 00222 00223 /* HEATER_STATUS <13> 00224 * NOTE: N/A. 00225 */ 00226 typedef enum { 00227 STATUS_HEATER_STATUS_MASK = ( 1U << 13U ), /*!< HEATER_STATUS mask */ 00228 STATUS_HEATER_OFF = ( 0U << 13U ), /*!< Heater off [Default] */ 00229 STATUS_HEATER_ON = ( 1U << 13U ) /*!< Heater on */ 00230 } SHT3X_status_heater_status_t ; 00231 00232 00233 /* RH_TRACKING_ALERT <11> 00234 * NOTE: N/A. 00235 */ 00236 typedef enum { 00237 STATUS_RH_TRACKING_ALERT_MASK = ( 1U << 11U ), /*!< RH_TRACKING_ALERT mask */ 00238 STATUS_RH_TRACKING_ALERT_NO_ALERT = ( 0U << 11U ), /*!< No alert [Default] */ 00239 STATUS_RH_TRACKING_ALERT_ALERT = ( 1U << 11U ) /*!< Alert */ 00240 } SHT3X_status_rh_tracking_alert_t ; 00241 00242 00243 /* T_TRACKING_ALERT <10> 00244 * NOTE: N/A. 00245 */ 00246 typedef enum { 00247 STATUS_T_TRACKING_ALERT_MASK = ( 1U << 10U ), /*!< T_TRACKING_ALERT mask */ 00248 STATUS_T_TRACKING_ALERT_NO_ALERT = ( 0U << 10U ), /*!< No alert [Default] */ 00249 STATUS_T_TRACKING_ALERT_ALERT = ( 1U << 10U ) /*!< Alert */ 00250 } SHT3X_status_t_tracking_alert_t ; 00251 00252 00253 /* SYSTEM_RESET_DETECTED <4> 00254 * NOTE: N/A. 00255 */ 00256 typedef enum { 00257 STATUS_SYSTEM_RESET_DETECTED_MASK = ( 1U << 4U ), /*!< SYSTEM_RESET_DETECTED mask */ 00258 STATUS_SYSTEM_RESET_DETECTED_NO_RESET_DETECTED = ( 0U << 4U ), /*!< No reset detected since last 'clear status register' command */ 00259 STATUS_SYSTEM_RESET_DETECTED_RESET_DETECTED = ( 1U << 4U ) /*!< Reset detected (hard reset, soft reset command or supply fail)[Default] */ 00260 } SHT3X_status_system_reset_detected_t ; 00261 00262 00263 /* COMMAND_STATUS <1> 00264 * NOTE: N/A. 00265 */ 00266 typedef enum { 00267 STATUS_COMMAND_STATUS_MASK = ( 1U << 10U ), /*!< COMMAND_STATUS mask */ 00268 STATUS_COMMAND_STATUS_COMMAND_EXECUTED_SUCCESSFULLY = ( 0U << 10U ), /*!< Last command executed successfully [Default] */ 00269 STATUS_COMMAND_STATUS_LAST_COMMAND_NOT_PROCESSED = ( 1U << 10U ) /*!< Last command not processed */ 00270 } SHT3X_status_command_status_t ; 00271 00272 00273 /* WRITE_DATA_CHECKSUM_STATUS <0> 00274 * NOTE: N/A. 00275 */ 00276 typedef enum { 00277 STATUS_WRITE_DATA_CHECKSUM_STATUS_MASK = ( 1U << 0U ), /*!< COMMAND_STATUS mask */ 00278 STATUS_WRITE_DATA_CHECKSUM_STATUS_CHECKSUM_CORRECT = ( 0U << 0U ), /*!< Checksum of last write transfer was correct[Default] */ 00279 STATUS_WRITE_DATA_CHECKSUM_STATUS_CHECKSUM_FAILED = ( 1U << 0U ) /*!< Checksum of last write transfer failed */ 00280 } SHT3X_status_write_data_checksum_status_t ; 00281 00282 00283 00284 00285 00286 #ifndef SHT3X_VECTOR_STRUCT_H 00287 #define SHT3X_VECTOR_STRUCT_H 00288 /* RAW DATA */ 00289 typedef struct { 00290 uint16_t rawRelativeHumidity; 00291 uint16_t rawTemperature; 00292 00293 uint8_t temperatureCRC; 00294 uint8_t relativeHumidityCRC; 00295 } SHT3X_raw_data_t; 00296 00297 00298 /* DATA: Temperature and Relative Humidity */ 00299 typedef struct { 00300 float relativeHumidity; 00301 float temperature; 00302 00303 uint8_t temperatureCRC; 00304 uint8_t relativeHumidityCRC; 00305 } SHT3X_final_data_t; 00306 00307 00308 /* STATUS REGISTER */ 00309 typedef struct { 00310 uint16_t status; 00311 uint8_t statusCRC; 00312 } SHT3X_status_data_t; 00313 00314 00315 00316 /* USER: User's variables */ 00317 typedef struct { 00318 /* Output data */ 00319 SHT3X_raw_data_t rawData; 00320 SHT3X_final_data_t data; 00321 00322 /* Status register */ 00323 SHT3X_status_data_t status; 00324 } SHT3X_data_t; 00325 #endif 00326 00327 00328 00329 00330 00331 /** 00332 * @brief INTERNAL CONSTANTS 00333 */ 00334 typedef enum { 00335 SHT3X_SUCCESS = 0, 00336 SHT3X_FAILURE = 1, 00337 I2C_SUCCESS = 0 00338 } SHT3X_status_t; 00339 00340 00341 00342 /** 00343 * @brief FUNCTION PROTOTYPES 00344 */ 00345 /** Create an SHT3X object connected to the specified I2C pins. 00346 * 00347 * @param sda I2C data pin 00348 * @param scl I2C clock pin 00349 * @param addr I2C slave address 00350 * @param freq I2C frequency in Hz. 00351 */ 00352 SHT3X ( PinName sda, PinName scl, uint32_t addr, uint32_t freq ); 00353 00354 /** Delete SHT3X object. 00355 */ 00356 ~SHT3X(); 00357 00358 /** It triggers all the raw data in single shot mode. 00359 */ 00360 SHT3X_status_t SHT3X_OneShotTriggerAllData ( SHT3X_command_registers_single_shot_mode_t mode ); 00361 00362 /** It gets all the raw data in single shot mode. 00363 */ 00364 SHT3X_status_t SHT3X_OneShotGetAllRawData ( SHT3X_raw_data_t* rawData ); 00365 00366 /** It sets periodic measurement with ART (accelerated response time). 00367 */ 00368 SHT3X_status_t SHT3X_SetPeriodicMeasurementART ( void ); 00369 00370 /** It sets the break command (stop periodic data acquisition mode). 00371 */ 00372 SHT3X_status_t SHT3X_SetBreakCommand ( void ); 00373 00374 /** It perfoms a software reset. 00375 */ 00376 SHT3X_status_t SHT3X_SetSoftReset ( void ); 00377 00378 /** It perfoms a reset through a general call address. 00379 */ 00380 SHT3X_status_t SHT3X_SetGeneralCallReset ( void ); 00381 00382 /** It sets the heater. 00383 */ 00384 SHT3X_status_t SHT3X_SetHeater ( SHT3X_command_registers_heater_t heater ); 00385 00386 /** It gets the status register. 00387 */ 00388 SHT3X_status_t SHT3X_GetStatus ( SHT3X_status_data_t* status ); 00389 00390 /** It clears the status register. 00391 */ 00392 SHT3X_status_t SHT3X_ClearStatus ( void ); 00393 00394 /** It sets the periodic data aquisition mode. 00395 */ 00396 SHT3X_status_t SHT3X_SetPeriodicAquisitionMode ( SHT3X_command_registers_periodic_data_mode_t mo ); 00397 00398 /** It gets the all raw data (in periodic aquisition mode). 00399 */ 00400 SHT3X_status_t SHT3X_GetAllRawDataFetchData ( SHT3X_raw_data_t* rawData ); 00401 00402 /** It processes all data: Temperature and Relative Humidity. 00403 */ 00404 void SHT3X_ProccessData ( SHT3X_raw_data_t rawData, SHT3X_final_data_t* data ); 00405 00406 private: 00407 I2C _i2c; 00408 uint32_t _SHT3X_Addr; 00409 }; 00410 00411 #endif /* SHT3X_H */
Generated on Wed Jul 13 2022 08:49:41 by
1.7.2