Port of the SHT2x example code from Sensirion
Dependents: sht21_test ENVLogger
SHT2x.h@2:2464fed17980, 2011-04-23 (annotated)
- 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?
User | Revision | Line number | New 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 |