Y SI / lib_SHT25

Dependents:   lib_SHT25_example

Committer:
YSI
Date:
Wed Sep 08 06:48:12 2021 +0000
Revision:
6:084428a5efcd
Parent:
5:8e34f365eb45
Child:
7:b55223269e6b
change wait_us blocking to sleep_for when target isn't LPC1768

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 0:71da3fbfe141 12 *
YSI 0:71da3fbfe141 13 * Serial pc(USBTX, USBRX);
YSI 3:81324c19d870 14 * SHT25 sensor(I2C_SDA, I2C_SCL);
YSI 0:71da3fbfe141 15 *
YSI 0:71da3fbfe141 16 * int main()
YSI 0:71da3fbfe141 17 * {
YSI 0:71da3fbfe141 18 * float temperature, humidity;
YSI 0:71da3fbfe141 19 * while(1)
YSI 0:71da3fbfe141 20 * {
YSI 3:81324c19d870 21 * temperature = sensor.getTemperature();
YSI 3:81324c19d870 22 * humidity = sensor.getTemperature();
YSI 3:81324c19d870 23 * pc.printf("\r\ntemperature = %6.2f%cC -|- humidity = %6.2f%%RH", temperature, 248, humidity);
YSI 3:81324c19d870 24 * sensor.waitSafeHeat();
YSI 0:71da3fbfe141 25 * sensor.getData(&temperature, &humidity);
YSI 3:81324c19d870 26 * pc.printf("\ntemperature = %6.2f%cC -|- humidity = %6.2f%%RH", temperature, 248, humidity);
YSI 3:81324c19d870 27 * sensor.waitSafeHeat();
YSI 0:71da3fbfe141 28 * }
YSI 0:71da3fbfe141 29 * }
YSI 0:71da3fbfe141 30 * @endcode
YSI 0:71da3fbfe141 31 * @file lib_SHT25.h
YSI 0:71da3fbfe141 32 * @date Jun 2018
YSI 0:71da3fbfe141 33 * @author Yannic Simon
YSI 0:71da3fbfe141 34 */
YSI 0:71da3fbfe141 35 #ifndef SHT25_H
YSI 0:71da3fbfe141 36 #define SHT25_H
YSI 0:71da3fbfe141 37
YSI 0:71da3fbfe141 38 #include "mbed.h"
YSI 0:71da3fbfe141 39
YSI 0:71da3fbfe141 40 #define SHT_I2C_ADDR 0x80 //Sensor I2C address
YSI 0:71da3fbfe141 41 #define SHT_TRIG_TEMP_HOLD 0xE3 //Trigger Temp with hold master
YSI 0:71da3fbfe141 42 #define SHT_TRIG_RH_HOLD 0xE5 //Trigger RH with hold master
YSI 0:71da3fbfe141 43 #define SHT_TRIG_TEMP 0xF3 //Trigger Temp with no hold master
YSI 0:71da3fbfe141 44 #define SHT_TRIG_RH 0xF5 //Trigger RH with no hold master
YSI 0:71da3fbfe141 45 #define SHT_WRITE_REG 0xE6 //Write to user register
YSI 0:71da3fbfe141 46 #define SHT_READ_REG 0xE7 //Read from user register
YSI 0:71da3fbfe141 47 #define SHT_SOFT_RESET 0xFE //Soft reset the sensor
YSI 5:8e34f365eb45 48 #define SHT_WAIT_MS_TEMP 85 //Sensor Temp measure
YSI 5:8e34f365eb45 49 #define SHT_WAIT_MS_RH 29 //Sensor RH measure
YSI 5:8e34f365eb45 50 #define SHT_WAIT_MS_SET 15 //Sensor (re)set
YSI 6:084428a5efcd 51 #if defined(TARGET_LPC1768)
YSI 5:8e34f365eb45 52 #define SHT_WAIT_MS(MS_DELAY) (wait_us(MS_DELAY*1000)) //(ThisThread::sleep_for(MS_DELAY)) introduit un bug de l'adresse MAC avec le LPC1768
YSI 6:084428a5efcd 53 #else
YSI 6:084428a5efcd 54 #define SHT_WAIT_MS(MS_DELAY) (ThisThread::sleep_for(MS_DELAY*1ms))
YSI 6:084428a5efcd 55 #endif
YSI 5:8e34f365eb45 56 #if MBED_MAJOR_VERSION > 5
YSI 5:8e34f365eb45 57 #define SHT_SELF_HEATING 1s //Keep self heating
YSI 5:8e34f365eb45 58 #else
YSI 0:71da3fbfe141 59 #define SHT_SELF_HEATING 0x01 //Keep self heating
YSI 5:8e34f365eb45 60 #endif
YSI 5:8e34f365eb45 61
YSI 0:71da3fbfe141 62
YSI 0:71da3fbfe141 63 /** SHT25 class
YSI 0:71da3fbfe141 64 */
YSI 0:71da3fbfe141 65 class SHT25
YSI 0:71da3fbfe141 66 {
YSI 0:71da3fbfe141 67 public:
YSI 5:8e34f365eb45 68 /** enumerator of the different precision of the sensor
YSI 5:8e34f365eb45 69 */
YSI 5:8e34f365eb45 70 typedef enum { SHT_PREC_RH12T14 = 0x00, SHT_PREC_RH08T12 = 0x01, SHT_PREC_RH10T13 = 0x80, SHT_PREC_RH11T11 = 0x81 }
YSI 5:8e34f365eb45 71 enum_sht_prec;
YSI 0:71da3fbfe141 72 /** make new SHT25 instance
YSI 0:71da3fbfe141 73 * connected to sda, scl I2C pins
YSI 0:71da3fbfe141 74 *
YSI 5:8e34f365eb45 75 * @param sda I2C pin, default I2C_SDA
YSI 5:8e34f365eb45 76 * @param scl I2C pin, default I2C_SCL
YSI 0:71da3fbfe141 77 */
YSI 5:8e34f365eb45 78 SHT25(PinName sda = I2C_SDA, PinName scl = I2C_SCL);
YSI 0:71da3fbfe141 79
YSI 0:71da3fbfe141 80 /** return Temperature(°C) and Humidity
YSI 0:71da3fbfe141 81 *
YSI 1:ebd95757fba4 82 * @param tempC address to return Temperature
YSI 1:ebd95757fba4 83 * @param relHumidity address to return Humidity
YSI 0:71da3fbfe141 84 * @returns none
YSI 0:71da3fbfe141 85 */
YSI 2:34e14b4cd981 86 void getData(float *tempC, float *relHumidity);
YSI 0:71da3fbfe141 87
YSI 0:71da3fbfe141 88 /** return Temperature(°C)
YSI 0:71da3fbfe141 89 *
YSI 0:71da3fbfe141 90 * @param none
YSI 0:71da3fbfe141 91 * @returns Temperature(°C)
YSI 0:71da3fbfe141 92 */
YSI 0:71da3fbfe141 93 float getTemperature(void);
YSI 0:71da3fbfe141 94
YSI 0:71da3fbfe141 95 /** return Humidity
YSI 0:71da3fbfe141 96 *
YSI 0:71da3fbfe141 97 * @param none
YSI 0:71da3fbfe141 98 * @returns Humidity
YSI 0:71da3fbfe141 99 */
YSI 0:71da3fbfe141 100 float getHumidity(void);
YSI 0:71da3fbfe141 101
YSI 0:71da3fbfe141 102 /** set data precision
YSI 0:71da3fbfe141 103 *
YSI 5:8e34f365eb45 104 * @param precision { SHT_PREC_RH12T14 = 0x00, SHT_PREC_RH08T12 = 0x01, SHT_PREC_RH10T13 = 0x80, SHT_PREC_RH11T11 = 0x81 }
YSI 2:34e14b4cd981 105 * @returns true on I2C acknoledge
YSI 0:71da3fbfe141 106 */
YSI 5:8e34f365eb45 107 bool setPrecision(const enum_sht_prec precision);
YSI 0:71da3fbfe141 108
YSI 0:71da3fbfe141 109 /** soft reset the sensor
YSI 0:71da3fbfe141 110 *
YSI 0:71da3fbfe141 111 * @param none
YSI 2:34e14b4cd981 112 * @returns true on I2C acknoledge
YSI 3:81324c19d870 113 */
YSI 0:71da3fbfe141 114 bool softReset(void);
YSI 3:81324c19d870 115
YSI 3:81324c19d870 116 /** wait safe heat for sensor
YSI 3:81324c19d870 117 *
YSI 3:81324c19d870 118 * @param none
YSI 3:81324c19d870 119 * @returns none
YSI 3:81324c19d870 120 */
YSI 3:81324c19d870 121 void waitSafeHeat(void);
YSI 0:71da3fbfe141 122 protected:
YSI 0:71da3fbfe141 123 I2C _i2c;
YSI 3:81324c19d870 124 Timeout _t, _h;
YSI 0:71da3fbfe141 125 private:
YSI 0:71da3fbfe141 126 void readData(float *, float *);
YSI 0:71da3fbfe141 127 float readTemperature(void);
YSI 0:71da3fbfe141 128 float readHumidity(void);
YSI 3:81324c19d870 129 void keepSafeTemperature(void);
YSI 3:81324c19d870 130 void keepSafeHumidity(void);
YSI 0:71da3fbfe141 131 float _temperature, _humidity;
YSI 3:81324c19d870 132 bool _selfHeatTemperature, _selfHeatHumidity;
YSI 0:71da3fbfe141 133 };
YSI 0:71da3fbfe141 134
YSI 0:71da3fbfe141 135 #endif