a library that provides a connection to a SHT21 temperature and humidity sensor Author: Graeme Coapes - Newcastle University, graeme.coapes@ncl.ac.uk Date: 29/11/12
Dependents: test_ncleee WeatherStation Temp_hum PROJ ... more
SHT21_ncleee.h@0:91e3e396bc6e, 2012-11-29 (annotated)
- Committer:
- graeme88
- Date:
- Thu Nov 29 10:36:10 2012 +0000
- Revision:
- 0:91e3e396bc6e
- Child:
- 1:73fc5aef174e
initial release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
graeme88 | 0:91e3e396bc6e | 1 | /** |
graeme88 | 0:91e3e396bc6e | 2 | * SHT21 - Temperature and Humidity Sensor by Sensiron |
graeme88 | 0:91e3e396bc6e | 3 | * |
graeme88 | 0:91e3e396bc6e | 4 | * This is a driver to connect to the sensor using an mbed device through an I2C interface |
graeme88 | 0:91e3e396bc6e | 5 | * |
graeme88 | 0:91e3e396bc6e | 6 | * Author: Graeme Coapes - Newcastle University |
graeme88 | 0:91e3e396bc6e | 7 | * Email: graeme.coapes@ncl.ac.uk |
graeme88 | 0:91e3e396bc6e | 8 | * |
graeme88 | 0:91e3e396bc6e | 9 | * Date: 28/11/2012 |
graeme88 | 0:91e3e396bc6e | 10 | * |
graeme88 | 0:91e3e396bc6e | 11 | */ |
graeme88 | 0:91e3e396bc6e | 12 | |
graeme88 | 0:91e3e396bc6e | 13 | #include "mbed.h" |
graeme88 | 0:91e3e396bc6e | 14 | |
graeme88 | 0:91e3e396bc6e | 15 | |
graeme88 | 0:91e3e396bc6e | 16 | #ifndef SHT21_ncleee |
graeme88 | 0:91e3e396bc6e | 17 | #define SHT21_ncleee |
graeme88 | 0:91e3e396bc6e | 18 | |
graeme88 | 0:91e3e396bc6e | 19 | /* |
graeme88 | 0:91e3e396bc6e | 20 | * Constants used in communication |
graeme88 | 0:91e3e396bc6e | 21 | * |
graeme88 | 0:91e3e396bc6e | 22 | * Refer to datasheet for full explanation |
graeme88 | 0:91e3e396bc6e | 23 | */ |
graeme88 | 0:91e3e396bc6e | 24 | |
graeme88 | 0:91e3e396bc6e | 25 | //Sensor I2C address |
graeme88 | 0:91e3e396bc6e | 26 | #define SHT_I2C_ADDR 0x80 |
graeme88 | 0:91e3e396bc6e | 27 | |
graeme88 | 0:91e3e396bc6e | 28 | //Commands... |
graeme88 | 0:91e3e396bc6e | 29 | //Trigger Temp with hold master |
graeme88 | 0:91e3e396bc6e | 30 | #define SHT_TRIG_TEMP_HOLD 0xE3 |
graeme88 | 0:91e3e396bc6e | 31 | //Trigger RH with hold master |
graeme88 | 0:91e3e396bc6e | 32 | #define SHT_TRIG_RH_HOLD 0xE5 |
graeme88 | 0:91e3e396bc6e | 33 | //Trigger Temp with no hold master |
graeme88 | 0:91e3e396bc6e | 34 | #define SHT_TRIG_TEMP 0xF3 |
graeme88 | 0:91e3e396bc6e | 35 | //Trigger RH with no hold master |
graeme88 | 0:91e3e396bc6e | 36 | #define SHT_TRIG_RH 0xF5 |
graeme88 | 0:91e3e396bc6e | 37 | //Write to user register |
graeme88 | 0:91e3e396bc6e | 38 | #define SHT_WRITE_REG 0xE6 |
graeme88 | 0:91e3e396bc6e | 39 | //Read from user register |
graeme88 | 0:91e3e396bc6e | 40 | #define SHT_READ_REG 0xE7 |
graeme88 | 0:91e3e396bc6e | 41 | //Soft reset the sensor |
graeme88 | 0:91e3e396bc6e | 42 | #define SHT_SOFT_RESET 0xFE |
graeme88 | 0:91e3e396bc6e | 43 | |
graeme88 | 0:91e3e396bc6e | 44 | //User Register information |
graeme88 | 0:91e3e396bc6e | 45 | |
graeme88 | 0:91e3e396bc6e | 46 | //Data precision settings |
graeme88 | 0:91e3e396bc6e | 47 | //RH 12 T 14 - default |
graeme88 | 0:91e3e396bc6e | 48 | #define SHT_PREC_1214 0x00 |
graeme88 | 0:91e3e396bc6e | 49 | //RH 8 T 10 |
graeme88 | 0:91e3e396bc6e | 50 | #define SHT_PREC_0812 0x01 |
graeme88 | 0:91e3e396bc6e | 51 | //RH 10 T 13 |
graeme88 | 0:91e3e396bc6e | 52 | #define SHT_PREC_1013 0x80 |
graeme88 | 0:91e3e396bc6e | 53 | //RH 11 T 11 |
graeme88 | 0:91e3e396bc6e | 54 | #define SHT_PREC_1111 0x81 |
graeme88 | 0:91e3e396bc6e | 55 | |
graeme88 | 0:91e3e396bc6e | 56 | //Battery status |
graeme88 | 0:91e3e396bc6e | 57 | #define SHT_BATTERY_STAT 0x40 |
graeme88 | 0:91e3e396bc6e | 58 | //Enable on chip heater |
graeme88 | 0:91e3e396bc6e | 59 | #define SHT_HEATER 0x04 |
graeme88 | 0:91e3e396bc6e | 60 | //Disable OTP reload |
graeme88 | 0:91e3e396bc6e | 61 | #define SHT_DISABLE_OTP 0x02 |
graeme88 | 0:91e3e396bc6e | 62 | |
graeme88 | 0:91e3e396bc6e | 63 | |
graeme88 | 0:91e3e396bc6e | 64 | //Fail conditions on the I2C bus |
graeme88 | 0:91e3e396bc6e | 65 | #define SHT_FAIL 1 |
graeme88 | 0:91e3e396bc6e | 66 | #define SHT_SUCCESS 0 |
graeme88 | 0:91e3e396bc6e | 67 | |
graeme88 | 0:91e3e396bc6e | 68 | //Author fail conditions |
graeme88 | 0:91e3e396bc6e | 69 | //1, 2, 3 can be used because these are status bits |
graeme88 | 0:91e3e396bc6e | 70 | //in the received measurement value |
graeme88 | 0:91e3e396bc6e | 71 | #define SHT_GOOD 0xFFFC |
graeme88 | 0:91e3e396bc6e | 72 | #define SHT_TRIG_FAIL 1 |
graeme88 | 0:91e3e396bc6e | 73 | #define SHT_READ_FAIL 2 |
graeme88 | 0:91e3e396bc6e | 74 | |
graeme88 | 0:91e3e396bc6e | 75 | |
graeme88 | 0:91e3e396bc6e | 76 | class SHT21 |
graeme88 | 0:91e3e396bc6e | 77 | { |
graeme88 | 0:91e3e396bc6e | 78 | private: |
graeme88 | 0:91e3e396bc6e | 79 | I2C *_i2c; |
graeme88 | 0:91e3e396bc6e | 80 | int triggerTemp(); |
graeme88 | 0:91e3e396bc6e | 81 | int requestTemp(); |
graeme88 | 0:91e3e396bc6e | 82 | unsigned short temperature; |
graeme88 | 0:91e3e396bc6e | 83 | int triggerRH(); |
graeme88 | 0:91e3e396bc6e | 84 | int requestRH(); |
graeme88 | 0:91e3e396bc6e | 85 | unsigned short humidity; |
graeme88 | 0:91e3e396bc6e | 86 | int wr(int cmd); |
graeme88 | 0:91e3e396bc6e | 87 | |
graeme88 | 0:91e3e396bc6e | 88 | public: |
graeme88 | 0:91e3e396bc6e | 89 | |
graeme88 | 0:91e3e396bc6e | 90 | /** Constructor - create a connection to a SHT21 temperature and humidity sensor |
graeme88 | 0:91e3e396bc6e | 91 | * through an I2C interface |
graeme88 | 0:91e3e396bc6e | 92 | * |
graeme88 | 0:91e3e396bc6e | 93 | * @param *i2c a pointer to the i2c interface that is used for communication |
graeme88 | 0:91e3e396bc6e | 94 | */ |
graeme88 | 0:91e3e396bc6e | 95 | SHT21(I2C *i2c); |
graeme88 | 0:91e3e396bc6e | 96 | int readTemp(); |
graeme88 | 0:91e3e396bc6e | 97 | int readHumidity(); |
graeme88 | 0:91e3e396bc6e | 98 | int reset(); |
graeme88 | 0:91e3e396bc6e | 99 | int setPrecision(char precision); |
graeme88 | 0:91e3e396bc6e | 100 | |
graeme88 | 0:91e3e396bc6e | 101 | }; |
graeme88 | 0:91e3e396bc6e | 102 | |
graeme88 | 0:91e3e396bc6e | 103 | |
graeme88 | 0:91e3e396bc6e | 104 | #endif |