SHT21 & SHT25 humidity and temperature sensors

Dependents:   Mt05_MtSense01

Committer:
johnathanlyu
Date:
Fri Apr 27 09:44:28 2018 +0000
Revision:
1:f9e3348b41a2
Parent:
0:f5f628a42ba8
update library initial flow

Who changed what in which revision?

UserRevisionLine numberNew contents of line
johnathanlyu 0:f5f628a42ba8 1 #include "SHT2X.h"
johnathanlyu 0:f5f628a42ba8 2
johnathanlyu 1:f9e3348b41a2 3 SHT2X::SHT2X(I2C& i2c, Serial& pc) : m_i2c(i2c), m_pc(pc) {
johnathanlyu 0:f5f628a42ba8 4 }
johnathanlyu 0:f5f628a42ba8 5
johnathanlyu 0:f5f628a42ba8 6 int SHT2X::measureTemperature(float *tempC) {
johnathanlyu 0:f5f628a42ba8 7 char command;
johnathanlyu 0:f5f628a42ba8 8 command = SHT_TRIG_TEMP;
johnathanlyu 0:f5f628a42ba8 9
johnathanlyu 0:f5f628a42ba8 10 m_i2c.write(SHT_I2C_ADDR, &command, 1, false);
johnathanlyu 0:f5f628a42ba8 11
johnathanlyu 0:f5f628a42ba8 12 wait_ms(100);
johnathanlyu 0:f5f628a42ba8 13
johnathanlyu 0:f5f628a42ba8 14 char rx[3];
johnathanlyu 0:f5f628a42ba8 15 uint16_t temperature;
johnathanlyu 0:f5f628a42ba8 16
johnathanlyu 0:f5f628a42ba8 17 m_i2c.read(SHT_I2C_ADDR, rx, 3, false);
johnathanlyu 0:f5f628a42ba8 18 temperature = (rx[0]<<8 | rx[1]);
johnathanlyu 0:f5f628a42ba8 19 temperature += ~0x0003;
johnathanlyu 1:f9e3348b41a2 20 // m_pc.printf(" uint_temp %d \r\n", temperature);
johnathanlyu 0:f5f628a42ba8 21 *tempC = -46.85 + 175.72 * ( ((float) temperature) / 65536 );
johnathanlyu 0:f5f628a42ba8 22
johnathanlyu 0:f5f628a42ba8 23 return 0;
johnathanlyu 0:f5f628a42ba8 24
johnathanlyu 0:f5f628a42ba8 25 }
johnathanlyu 0:f5f628a42ba8 26
johnathanlyu 0:f5f628a42ba8 27 int SHT2X::measureHumidty(float *relHumidty) {
johnathanlyu 0:f5f628a42ba8 28 char command;
johnathanlyu 0:f5f628a42ba8 29 command = SHT_TRIG_RH;
johnathanlyu 0:f5f628a42ba8 30
johnathanlyu 0:f5f628a42ba8 31 m_i2c.write(SHT_I2C_ADDR, &command, 1, false);
johnathanlyu 0:f5f628a42ba8 32
johnathanlyu 0:f5f628a42ba8 33 wait_ms(100);
johnathanlyu 0:f5f628a42ba8 34
johnathanlyu 0:f5f628a42ba8 35 char rx[3];
johnathanlyu 0:f5f628a42ba8 36 uint16_t humidity;
johnathanlyu 0:f5f628a42ba8 37
johnathanlyu 0:f5f628a42ba8 38 m_i2c.read(SHT_I2C_ADDR, rx, 3, false);
johnathanlyu 0:f5f628a42ba8 39
johnathanlyu 0:f5f628a42ba8 40 humidity = (rx[0]<<8) + rx[1];
johnathanlyu 0:f5f628a42ba8 41 humidity += ~0x0003;
johnathanlyu 0:f5f628a42ba8 42 *relHumidty = -6 + 125 * ( ((float) humidity) / 65536 );
johnathanlyu 0:f5f628a42ba8 43
johnathanlyu 0:f5f628a42ba8 44 return 0;
johnathanlyu 0:f5f628a42ba8 45
johnathanlyu 0:f5f628a42ba8 46 }
johnathanlyu 0:f5f628a42ba8 47
johnathanlyu 0:f5f628a42ba8 48 int SHT2X::readData(float *tempC, float *relHumidty) {
johnathanlyu 0:f5f628a42ba8 49 measureTemperature(tempC);
johnathanlyu 0:f5f628a42ba8 50 wait_ms(100);
johnathanlyu 0:f5f628a42ba8 51 measureHumidty(relHumidty);
johnathanlyu 0:f5f628a42ba8 52 return 0;
johnathanlyu 0:f5f628a42ba8 53 }
johnathanlyu 0:f5f628a42ba8 54
johnathanlyu 0:f5f628a42ba8 55 int SHT2X::setPrecision(char precision) {
johnathanlyu 0:f5f628a42ba8 56
johnathanlyu 0:f5f628a42ba8 57 char command[2];
johnathanlyu 0:f5f628a42ba8 58 command[0] = SHT_WRITE_REG;
johnathanlyu 0:f5f628a42ba8 59 command[1] = precision;
johnathanlyu 0:f5f628a42ba8 60
johnathanlyu 0:f5f628a42ba8 61 return m_i2c.write(SHT_I2C_ADDR, command, 2, false);
johnathanlyu 0:f5f628a42ba8 62
johnathanlyu 0:f5f628a42ba8 63 }
johnathanlyu 0:f5f628a42ba8 64
johnathanlyu 0:f5f628a42ba8 65 bool SHT2X::softRest() {
johnathanlyu 0:f5f628a42ba8 66 char command = SHT_SOFT_RESET;
johnathanlyu 0:f5f628a42ba8 67
johnathanlyu 0:f5f628a42ba8 68 if (m_i2c.write(SHT_I2C_ADDR, &command, 1, false) != 0) {
johnathanlyu 0:f5f628a42ba8 69 return false;
johnathanlyu 0:f5f628a42ba8 70 }
johnathanlyu 0:f5f628a42ba8 71
johnathanlyu 0:f5f628a42ba8 72 return true;
johnathanlyu 0:f5f628a42ba8 73 }