SHT21 & SHT25 humidity and temperature sensors
SHT2X.cpp@0:f5f628a42ba8, 2017-06-02 (annotated)
- Committer:
- johnathanlyu
- Date:
- Fri Jun 02 05:43:32 2017 +0000
- Revision:
- 0:f5f628a42ba8
- Child:
- 1:f9e3348b41a2
Sensirion SHT20, SHT21, SHT25 Library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
johnathanlyu | 0:f5f628a42ba8 | 1 | #include "SHT2X.h" |
johnathanlyu | 0:f5f628a42ba8 | 2 | |
johnathanlyu | 0:f5f628a42ba8 | 3 | SHT2X::SHT2X(I2C& i2c) : m_i2c(i2c), pc(p5,p4) { |
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 | 0:f5f628a42ba8 | 20 | // 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 | } |