Port of the SHT2x example code from Sensirion

Dependents:   sht21_test ENVLogger

Committer:
ssozonoff
Date:
Sat Apr 23 19:07:52 2011 +0000
Revision:
2:2464fed17980
Parent:
1:d0f691423bf1
Code cleanup

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ssozonoff 2:2464fed17980 1 /*
ssozonoff 2:2464fed17980 2 Permission is hereby granted, free of charge, to any person obtaining a copy
ssozonoff 2:2464fed17980 3 of this software and associated documentation files (the "Software"), to deal
ssozonoff 2:2464fed17980 4 in the Software without restriction, including without limitation the rights
ssozonoff 2:2464fed17980 5 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
ssozonoff 2:2464fed17980 6 copies of the Software, and to permit persons to whom the Software is
ssozonoff 2:2464fed17980 7 furnished to do so, subject to the following conditions:
ssozonoff 2:2464fed17980 8
ssozonoff 2:2464fed17980 9 The above copyright notice and this permission notice shall be included in
ssozonoff 2:2464fed17980 10 all copies or substantial portions of the Software.
ssozonoff 2:2464fed17980 11
ssozonoff 2:2464fed17980 12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
ssozonoff 2:2464fed17980 13 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
ssozonoff 2:2464fed17980 14 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
ssozonoff 2:2464fed17980 15 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
ssozonoff 2:2464fed17980 16 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
ssozonoff 2:2464fed17980 17 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
ssozonoff 2:2464fed17980 18 THE SOFTWARE.
ssozonoff 2:2464fed17980 19 */
ssozonoff 2:2464fed17980 20
ssozonoff 2:2464fed17980 21 //=============================================================================
ssozonoff 2:2464fed17980 22 // Port of the SHT21 example code from Sensirion
ssozonoff 2:2464fed17980 23 // port by Serge Sozonoff
ssozonoff 2:2464fed17980 24 //=============================================================================
ssozonoff 2:2464fed17980 25
ssozonoff 0:74df6ab91c79 26 #include "mbed.h"
ssozonoff 1:d0f691423bf1 27 #include "SHT21_I2C.h"
ssozonoff 0:74df6ab91c79 28
ssozonoff 0:74df6ab91c79 29 #ifndef SHT2x_H
ssozonoff 0:74df6ab91c79 30 #define SHT2x_H
ssozonoff 0:74df6ab91c79 31
ssozonoff 0:74df6ab91c79 32 const int POLYNOMIAL = 0x131; //P(x)=x^8+x^5+x^4+1 = 100110001
ssozonoff 1:d0f691423bf1 33 const int ACK = 1;
ssozonoff 1:d0f691423bf1 34 const int NoACK = 0;
ssozonoff 1:d0f691423bf1 35
ssozonoff 0:74df6ab91c79 36 // sensor command
ssozonoff 0:74df6ab91c79 37 enum etSHT2xCommand {
ssozonoff 0:74df6ab91c79 38 TRIG_T_MEASUREMENT_HM = 0xE3, // command trig. temp meas. hold master
ssozonoff 0:74df6ab91c79 39 TRIG_RH_MEASUREMENT_HM = 0xE5, // command trig. humidity meas. hold master
ssozonoff 0:74df6ab91c79 40 TRIG_T_MEASUREMENT_POLL = 0xF3, // command trig. temp meas. no hold master
ssozonoff 0:74df6ab91c79 41 TRIG_RH_MEASUREMENT_POLL = 0xF5, // command trig. humidity meas. no hold master
ssozonoff 0:74df6ab91c79 42 USER_REG_W = 0xE6, // command writing user register
ssozonoff 0:74df6ab91c79 43 USER_REG_R = 0xE7, // command reading user register
ssozonoff 0:74df6ab91c79 44 SOFT_RESET = 0xFE // command soft reset
ssozonoff 0:74df6ab91c79 45 };
ssozonoff 0:74df6ab91c79 46
ssozonoff 0:74df6ab91c79 47 enum etSHT2xResolution {
ssozonoff 0:74df6ab91c79 48 SHT2x_RES_12_14BIT = 0x00, // RH=12bit, T=14bit
ssozonoff 0:74df6ab91c79 49 SHT2x_RES_8_12BIT = 0x01, // RH= 8bit, T=12bit
ssozonoff 0:74df6ab91c79 50 SHT2x_RES_10_13BIT = 0x80, // RH=10bit, T=13bit
ssozonoff 0:74df6ab91c79 51 SHT2x_RES_11_11BIT = 0x81, // RH=11bit, T=11bit
ssozonoff 0:74df6ab91c79 52 SHT2x_RES_MASK = 0x81 // Mask for res. bits (7,0) in user reg.
ssozonoff 0:74df6ab91c79 53 };
ssozonoff 0:74df6ab91c79 54
ssozonoff 0:74df6ab91c79 55 enum etSHT2xEob {
ssozonoff 0:74df6ab91c79 56 SHT2x_EOB_ON = 0x40, // end of battery
ssozonoff 0:74df6ab91c79 57 SHT2x_EOB_MASK = 0x40, // Mask for EOB bit(6) in user reg.
ssozonoff 0:74df6ab91c79 58 };
ssozonoff 0:74df6ab91c79 59
ssozonoff 0:74df6ab91c79 60 enum etSHT2xHeater {
ssozonoff 0:74df6ab91c79 61 SHT2x_HEATER_ON = 0x04, // heater on
ssozonoff 0:74df6ab91c79 62 SHT2x_HEATER_OFF = 0x00, // heater off
ssozonoff 0:74df6ab91c79 63 SHT2x_HEATER_MASK = 0x04, // Mask for Heater bit(2) in user reg.
ssozonoff 0:74df6ab91c79 64 };
ssozonoff 0:74df6ab91c79 65 // measurement signal selection
ssozonoff 0:74df6ab91c79 66
ssozonoff 0:74df6ab91c79 67 enum etSHT2xMeasureType {
ssozonoff 0:74df6ab91c79 68 HUMIDITY,
ssozonoff 0:74df6ab91c79 69 TEMP
ssozonoff 0:74df6ab91c79 70 };
ssozonoff 0:74df6ab91c79 71
ssozonoff 0:74df6ab91c79 72 enum etI2cHeader {
ssozonoff 0:74df6ab91c79 73 I2C_ADR_W = 128, // sensor I2C address + write bit
ssozonoff 0:74df6ab91c79 74 I2C_ADR_R = 129 // sensor I2C address + read bit
ssozonoff 0:74df6ab91c79 75 };
ssozonoff 0:74df6ab91c79 76
ssozonoff 0:74df6ab91c79 77 // Error codes
ssozonoff 0:74df6ab91c79 78 enum etError {
ssozonoff 0:74df6ab91c79 79 ACK_ERROR = 0x01,
ssozonoff 0:74df6ab91c79 80 TIME_OUT_ERROR = 0x02,
ssozonoff 0:74df6ab91c79 81 CHECKSUM_ERROR = 0x04,
ssozonoff 0:74df6ab91c79 82 UNIT_ERROR = 0x08
ssozonoff 0:74df6ab91c79 83 };
ssozonoff 0:74df6ab91c79 84
ssozonoff 0:74df6ab91c79 85 class SHT2x : public Base {
ssozonoff 0:74df6ab91c79 86 public:
ssozonoff 0:74df6ab91c79 87 SHT2x (PinName p_sda, PinName p_scl);
ssozonoff 0:74df6ab91c79 88
ssozonoff 0:74df6ab91c79 89 int SHT2x_CheckCrc(int data[], int nbrOfBytes, int checksum);
ssozonoff 0:74df6ab91c79 90 int SHT2x_ReadUserRegister(int *pRegisterValue);
ssozonoff 0:74df6ab91c79 91 int SHT2x_WriteUserRegister(int *pRegisterValue);
ssozonoff 0:74df6ab91c79 92 int SHT2x_MeasurePoll(etSHT2xMeasureType eSHT2xMeasureType, int *pMeasurand);
ssozonoff 0:74df6ab91c79 93 int SHT2x_MeasureHM(etSHT2xMeasureType eSHT2xMeasureType, int *pMeasurand);
ssozonoff 0:74df6ab91c79 94 int SHT2x_SoftReset();
ssozonoff 0:74df6ab91c79 95 float SHT2x_CalcRH(int u16sRH);
ssozonoff 0:74df6ab91c79 96 float SHT2x_CalcTemperatureC(int u16sT);
ssozonoff 0:74df6ab91c79 97 int SHT2x_GetSerialNumber(int u8SerialNumber[]);
ssozonoff 2:2464fed17980 98 float SHT2x_GetDewpoint(float h, float t);
ssozonoff 0:74df6ab91c79 99
ssozonoff 0:74df6ab91c79 100 protected:
ssozonoff 2:2464fed17980 101 SHT_I2C i2c;
ssozonoff 2:2464fed17980 102 int i2cWrite(int data);
ssozonoff 0:74df6ab91c79 103
ssozonoff 0:74df6ab91c79 104 private:
ssozonoff 0:74df6ab91c79 105
ssozonoff 0:74df6ab91c79 106 };
ssozonoff 0:74df6ab91c79 107 #endif