Y SI / lib_SHT25

Dependents:   lib_SHT25_example

Committer:
YSI
Date:
Wed Oct 06 13:41:00 2021 +0000
Revision:
9:382955a266cb
Parent:
8:bb3dbc86a180
Child:
10:18e6cd816998
Add wait function compatible with mbed2.0, mbed5.0 and mbed6.0 and more.; Default wait for request is typical value and up to maximum value if necessary/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YSI 0:71da3fbfe141 1 /** SHT25 class
YSI 0:71da3fbfe141 2 *
YSI 0:71da3fbfe141 3 * @purpose library for SHT25 humidity and temperature sensor
YSI 0:71da3fbfe141 4 *
YSI 0:71da3fbfe141 5 * Use to get temperature and humidity
YSI 0:71da3fbfe141 6 *
YSI 0:71da3fbfe141 7 * https://www.sensirion.com/products/humidity-sensor/
YSI 0:71da3fbfe141 8 *
YSI 0:71da3fbfe141 9 * Example:
YSI 0:71da3fbfe141 10 * @code
YSI 0:71da3fbfe141 11 * #include "lib_SHT25.h"
YSI 9:382955a266cb 12 *
YSI 3:81324c19d870 13 * SHT25 sensor(I2C_SDA, I2C_SCL);
YSI 0:71da3fbfe141 14 *
YSI 0:71da3fbfe141 15 * int main()
YSI 0:71da3fbfe141 16 * {
YSI 0:71da3fbfe141 17 * while(1)
YSI 0:71da3fbfe141 18 * {
YSI 9:382955a266cb 19 * sensor.waitSafeHeat();
YSI 9:382955a266cb 20 * float temperature = sensor.getTemperature(), humidity = sensor.getHumidity();
YSI 9:382955a266cb 21 * printf("\r\ntemperature = %6.2f%cC -|- humidity = %6.2f%%RH", temperature, 248, humidity);
YSI 3:81324c19d870 22 * sensor.waitSafeHeat();
YSI 0:71da3fbfe141 23 * sensor.getData(&temperature, &humidity);
YSI 9:382955a266cb 24 * printf("\r\ntemperature = %6.2f%cC -|- humidity = %6.2f%%RH", temperature, 248, humidity);
YSI 0:71da3fbfe141 25 * }
YSI 0:71da3fbfe141 26 * }
YSI 0:71da3fbfe141 27 * @endcode
YSI 0:71da3fbfe141 28 * @file lib_SHT25.h
YSI 0:71da3fbfe141 29 * @date Jun 2018
YSI 0:71da3fbfe141 30 * @author Yannic Simon
YSI 0:71da3fbfe141 31 */
YSI 0:71da3fbfe141 32 #ifndef SHT25_H
YSI 0:71da3fbfe141 33 #define SHT25_H
YSI 0:71da3fbfe141 34
YSI 0:71da3fbfe141 35 #include "mbed.h"
YSI 0:71da3fbfe141 36
YSI 9:382955a266cb 37 #define SHT_I2C_FREQUENCY 100e3 //Sensor I2C Frequency max 400KHz
YSI 9:382955a266cb 38 #define SHT_I2C_ADDR 0x80 //Sensor I2C address
YSI 0:71da3fbfe141 39 #define SHT_TRIG_TEMP_HOLD 0xE3 //Trigger Temp with hold master
YSI 0:71da3fbfe141 40 #define SHT_TRIG_RH_HOLD 0xE5 //Trigger RH with hold master
YSI 7:b55223269e6b 41 #define SHT_TRIG_TEMP_NHOLD 0xF3 //Trigger Temp with no hold master
YSI 7:b55223269e6b 42 #define SHT_TRIG_RH_NHOLD 0xF5 //Trigger RH with no hold master
YSI 7:b55223269e6b 43 #define SHT_WRITE_REG_USER 0xE6 //Write to user register
YSI 7:b55223269e6b 44 #define SHT_READ_REG_USER 0xE7 //Read from user register
YSI 0:71da3fbfe141 45 #define SHT_SOFT_RESET 0xFE //Soft reset the sensor
YSI 5:8e34f365eb45 46 #if MBED_MAJOR_VERSION > 5
YSI 9:382955a266cb 47 #define SHT_SELF_HEATING 2s //Keep self heating
YSI 9:382955a266cb 48 #define SHT_WAIT(ms) (thread_sleep_for(ms))
YSI 5:8e34f365eb45 49 #else
YSI 0:71da3fbfe141 50 #define SHT_SELF_HEATING 0x01 //Keep self heating
YSI 9:382955a266cb 51 #define SHT_WAIT(ms) (wait_us(1000*ms))
YSI 5:8e34f365eb45 52 #endif
YSI 5:8e34f365eb45 53
YSI 0:71da3fbfe141 54
YSI 0:71da3fbfe141 55 /** SHT25 class
YSI 0:71da3fbfe141 56 */
YSI 0:71da3fbfe141 57 class SHT25
YSI 0:71da3fbfe141 58 {
YSI 0:71da3fbfe141 59 public:
YSI 5:8e34f365eb45 60 /** enumerator of the different precision of the sensor
YSI 5:8e34f365eb45 61 */
YSI 5:8e34f365eb45 62 typedef enum { SHT_PREC_RH12T14 = 0x00, SHT_PREC_RH08T12 = 0x01, SHT_PREC_RH10T13 = 0x80, SHT_PREC_RH11T11 = 0x81 }
YSI 5:8e34f365eb45 63 enum_sht_prec;
YSI 0:71da3fbfe141 64 /** make new SHT25 instance
YSI 0:71da3fbfe141 65 * connected to sda, scl I2C pins
YSI 0:71da3fbfe141 66 *
YSI 8:bb3dbc86a180 67 * @param sda I2C pin
YSI 8:bb3dbc86a180 68 * @param scl I2C pin
YSI 8:bb3dbc86a180 69 * @param precision SHT25 precision for humidity(default 12 bits) and temperature(default 14 bits)
YSI 9:382955a266cb 70 * @param frequency I2C frequency, default 100KHz and maximum 400KHz
YSI 0:71da3fbfe141 71 */
YSI 8:bb3dbc86a180 72 SHT25(PinName sda, PinName scl, enum_sht_prec precision = SHT_PREC_RH12T14, int frequency = SHT_I2C_FREQUENCY);
YSI 0:71da3fbfe141 73
YSI 0:71da3fbfe141 74 /** return Temperature(°C) and Humidity
YSI 0:71da3fbfe141 75 *
YSI 1:ebd95757fba4 76 * @param tempC address to return Temperature
YSI 1:ebd95757fba4 77 * @param relHumidity address to return Humidity
YSI 0:71da3fbfe141 78 * @returns none
YSI 0:71da3fbfe141 79 */
YSI 2:34e14b4cd981 80 void getData(float *tempC, float *relHumidity);
YSI 0:71da3fbfe141 81
YSI 0:71da3fbfe141 82 /** return Temperature(°C)
YSI 0:71da3fbfe141 83 *
YSI 0:71da3fbfe141 84 * @param none
YSI 0:71da3fbfe141 85 * @returns Temperature(°C)
YSI 0:71da3fbfe141 86 */
YSI 0:71da3fbfe141 87 float getTemperature(void);
YSI 0:71da3fbfe141 88
YSI 0:71da3fbfe141 89 /** return Humidity
YSI 0:71da3fbfe141 90 *
YSI 0:71da3fbfe141 91 * @param none
YSI 0:71da3fbfe141 92 * @returns Humidity
YSI 0:71da3fbfe141 93 */
YSI 0:71da3fbfe141 94 float getHumidity(void);
YSI 0:71da3fbfe141 95
YSI 0:71da3fbfe141 96 /** set data precision
YSI 0:71da3fbfe141 97 *
YSI 5:8e34f365eb45 98 * @param precision { SHT_PREC_RH12T14 = 0x00, SHT_PREC_RH08T12 = 0x01, SHT_PREC_RH10T13 = 0x80, SHT_PREC_RH11T11 = 0x81 }
YSI 2:34e14b4cd981 99 * @returns true on I2C acknoledge
YSI 0:71da3fbfe141 100 */
YSI 5:8e34f365eb45 101 bool setPrecision(const enum_sht_prec precision);
YSI 0:71da3fbfe141 102
YSI 0:71da3fbfe141 103 /** soft reset the sensor
YSI 0:71da3fbfe141 104 *
YSI 0:71da3fbfe141 105 * @param none
YSI 2:34e14b4cd981 106 * @returns true on I2C acknoledge
YSI 3:81324c19d870 107 */
YSI 0:71da3fbfe141 108 bool softReset(void);
YSI 3:81324c19d870 109
YSI 3:81324c19d870 110 /** wait safe heat for sensor
YSI 3:81324c19d870 111 *
YSI 3:81324c19d870 112 * @param none
YSI 3:81324c19d870 113 * @returns none
YSI 3:81324c19d870 114 */
YSI 3:81324c19d870 115 void waitSafeHeat(void);
YSI 0:71da3fbfe141 116 protected:
YSI 0:71da3fbfe141 117 I2C _i2c;
YSI 3:81324c19d870 118 Timeout _t, _h;
YSI 0:71da3fbfe141 119 private:
YSI 9:382955a266cb 120 void readData(void);
YSI 0:71da3fbfe141 121 float readTemperature(void);
YSI 0:71da3fbfe141 122 float readHumidity(void);
YSI 3:81324c19d870 123 void keepSafeTemperature(void);
YSI 3:81324c19d870 124 void keepSafeHumidity(void);
YSI 0:71da3fbfe141 125 float _temperature, _humidity;
YSI 3:81324c19d870 126 bool _selfHeatTemperature, _selfHeatHumidity;
YSI 0:71da3fbfe141 127 };
YSI 0:71da3fbfe141 128
YSI 0:71da3fbfe141 129 #endif