Port of the SHT2x example code from Sensirion

Dependents:   sht21_test ENVLogger

Committer:
ssozonoff
Date:
Sat Apr 23 14:08:11 2011 +0000
Revision:
0:74df6ab91c79
Child:
1:d0f691423bf1
Alpha

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ssozonoff 0:74df6ab91c79 1 #include "mbed.h"
ssozonoff 0:74df6ab91c79 2
ssozonoff 0:74df6ab91c79 3 #ifndef SHT2x_H
ssozonoff 0:74df6ab91c79 4 #define SHT2x_H
ssozonoff 0:74df6ab91c79 5 //==============================================================================
ssozonoff 0:74df6ab91c79 6 // S E N S I R I O N AG, Laubisruetistr. 50, CH-8712 Staefa, Switzerland
ssozonoff 0:74df6ab91c79 7 //==============================================================================
ssozonoff 0:74df6ab91c79 8 // Project : SHT2x Sample Code (V1.2)
ssozonoff 0:74df6ab91c79 9 // File : SHT2x.h
ssozonoff 0:74df6ab91c79 10 // Author : MST
ssozonoff 0:74df6ab91c79 11 // Controller: NEC V850/SG3 (uPD70F3740)
ssozonoff 0:74df6ab91c79 12 // Compiler : IAR compiler for V850 (3.50A)
ssozonoff 0:74df6ab91c79 13 // Brief : Sensor layer. Definitions of commands and registers,
ssozonoff 0:74df6ab91c79 14 // functions for sensor access
ssozonoff 0:74df6ab91c79 15 //==============================================================================
ssozonoff 0:74df6ab91c79 16 // CRC
ssozonoff 0:74df6ab91c79 17
ssozonoff 0:74df6ab91c79 18 const int POLYNOMIAL = 0x131; //P(x)=x^8+x^5+x^4+1 = 100110001
ssozonoff 0:74df6ab91c79 19 // sensor command
ssozonoff 0:74df6ab91c79 20 enum etSHT2xCommand {
ssozonoff 0:74df6ab91c79 21 TRIG_T_MEASUREMENT_HM = 0xE3, // command trig. temp meas. hold master
ssozonoff 0:74df6ab91c79 22 TRIG_RH_MEASUREMENT_HM = 0xE5, // command trig. humidity meas. hold master
ssozonoff 0:74df6ab91c79 23 TRIG_T_MEASUREMENT_POLL = 0xF3, // command trig. temp meas. no hold master
ssozonoff 0:74df6ab91c79 24 TRIG_RH_MEASUREMENT_POLL = 0xF5, // command trig. humidity meas. no hold master
ssozonoff 0:74df6ab91c79 25 USER_REG_W = 0xE6, // command writing user register
ssozonoff 0:74df6ab91c79 26 USER_REG_R = 0xE7, // command reading user register
ssozonoff 0:74df6ab91c79 27 SOFT_RESET = 0xFE // command soft reset
ssozonoff 0:74df6ab91c79 28 };
ssozonoff 0:74df6ab91c79 29
ssozonoff 0:74df6ab91c79 30 enum etSHT2xResolution {
ssozonoff 0:74df6ab91c79 31 SHT2x_RES_12_14BIT = 0x00, // RH=12bit, T=14bit
ssozonoff 0:74df6ab91c79 32 SHT2x_RES_8_12BIT = 0x01, // RH= 8bit, T=12bit
ssozonoff 0:74df6ab91c79 33 SHT2x_RES_10_13BIT = 0x80, // RH=10bit, T=13bit
ssozonoff 0:74df6ab91c79 34 SHT2x_RES_11_11BIT = 0x81, // RH=11bit, T=11bit
ssozonoff 0:74df6ab91c79 35 SHT2x_RES_MASK = 0x81 // Mask for res. bits (7,0) in user reg.
ssozonoff 0:74df6ab91c79 36 };
ssozonoff 0:74df6ab91c79 37
ssozonoff 0:74df6ab91c79 38 enum etSHT2xEob {
ssozonoff 0:74df6ab91c79 39 SHT2x_EOB_ON = 0x40, // end of battery
ssozonoff 0:74df6ab91c79 40 SHT2x_EOB_MASK = 0x40, // Mask for EOB bit(6) in user reg.
ssozonoff 0:74df6ab91c79 41 };
ssozonoff 0:74df6ab91c79 42
ssozonoff 0:74df6ab91c79 43 enum etSHT2xHeater {
ssozonoff 0:74df6ab91c79 44 SHT2x_HEATER_ON = 0x04, // heater on
ssozonoff 0:74df6ab91c79 45 SHT2x_HEATER_OFF = 0x00, // heater off
ssozonoff 0:74df6ab91c79 46 SHT2x_HEATER_MASK = 0x04, // Mask for Heater bit(2) in user reg.
ssozonoff 0:74df6ab91c79 47 };
ssozonoff 0:74df6ab91c79 48 // measurement signal selection
ssozonoff 0:74df6ab91c79 49
ssozonoff 0:74df6ab91c79 50 enum etSHT2xMeasureType {
ssozonoff 0:74df6ab91c79 51 HUMIDITY,
ssozonoff 0:74df6ab91c79 52 TEMP
ssozonoff 0:74df6ab91c79 53 };
ssozonoff 0:74df6ab91c79 54
ssozonoff 0:74df6ab91c79 55 enum etI2cHeader {
ssozonoff 0:74df6ab91c79 56 I2C_ADR_W = 128, // sensor I2C address + write bit
ssozonoff 0:74df6ab91c79 57 I2C_ADR_R = 129 // sensor I2C address + read bit
ssozonoff 0:74df6ab91c79 58 };
ssozonoff 0:74df6ab91c79 59
ssozonoff 0:74df6ab91c79 60 // Error codes
ssozonoff 0:74df6ab91c79 61 enum etError {
ssozonoff 0:74df6ab91c79 62 ACK_ERROR = 0x01,
ssozonoff 0:74df6ab91c79 63 TIME_OUT_ERROR = 0x02,
ssozonoff 0:74df6ab91c79 64 CHECKSUM_ERROR = 0x04,
ssozonoff 0:74df6ab91c79 65 UNIT_ERROR = 0x08
ssozonoff 0:74df6ab91c79 66 };
ssozonoff 0:74df6ab91c79 67
ssozonoff 0:74df6ab91c79 68 class SHT2x : public Base {
ssozonoff 0:74df6ab91c79 69 public:
ssozonoff 0:74df6ab91c79 70 SHT2x (PinName p_sda, PinName p_scl);
ssozonoff 0:74df6ab91c79 71 SHT2x (I2C& p_i2c);
ssozonoff 0:74df6ab91c79 72
ssozonoff 0:74df6ab91c79 73 int SHT2x_CheckCrc(int data[], int nbrOfBytes, int checksum);
ssozonoff 0:74df6ab91c79 74 int SHT2x_ReadUserRegister(int *pRegisterValue);
ssozonoff 0:74df6ab91c79 75 int SHT2x_WriteUserRegister(int *pRegisterValue);
ssozonoff 0:74df6ab91c79 76 int SHT2x_MeasurePoll(etSHT2xMeasureType eSHT2xMeasureType, int *pMeasurand);
ssozonoff 0:74df6ab91c79 77 int SHT2x_MeasureHM(etSHT2xMeasureType eSHT2xMeasureType, int *pMeasurand);
ssozonoff 0:74df6ab91c79 78 int SHT2x_SoftReset();
ssozonoff 0:74df6ab91c79 79 float SHT2x_CalcRH(int u16sRH);
ssozonoff 0:74df6ab91c79 80 float SHT2x_CalcTemperatureC(int u16sT);
ssozonoff 0:74df6ab91c79 81 int SHT2x_GetSerialNumber(int u8SerialNumber[]);
ssozonoff 0:74df6ab91c79 82
ssozonoff 0:74df6ab91c79 83 protected:
ssozonoff 0:74df6ab91c79 84 I2C i2c;
ssozonoff 0:74df6ab91c79 85
ssozonoff 0:74df6ab91c79 86 private:
ssozonoff 0:74df6ab91c79 87
ssozonoff 0:74df6ab91c79 88 };
ssozonoff 0:74df6ab91c79 89 #endif