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@3:03bbabb7b0b0, 2012-12-06 (annotated)
- Committer:
- graeme88
- Date:
- Thu Dec 06 10:33:10 2012 +0000
- Revision:
- 3:03bbabb7b0b0
- Parent:
- 2:1411bb5e8c0a
tested on device, temperature and humidity read functions now return floats with real world values
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
graeme88 | 1:73fc5aef174e | 1 | /* Copyright (c) 2012 Graeme Coapes, Newcastle University, MIT License |
graeme88 | 1:73fc5aef174e | 2 | * |
graeme88 | 1:73fc5aef174e | 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy of this software |
graeme88 | 1:73fc5aef174e | 4 | * and associated documentation files (the "Software"), to deal in the Software without restriction, |
graeme88 | 1:73fc5aef174e | 5 | * including without limitation the rights to use, copy, modify, merge, publish, distribute, |
graeme88 | 1:73fc5aef174e | 6 | * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is |
graeme88 | 1:73fc5aef174e | 7 | * furnished to do so, subject to the following conditions: |
graeme88 | 1:73fc5aef174e | 8 | * |
graeme88 | 1:73fc5aef174e | 9 | * The above copyright notice and this permission notice shall be included in all copies or |
graeme88 | 1:73fc5aef174e | 10 | * substantial portions of the Software. |
graeme88 | 1:73fc5aef174e | 11 | * |
graeme88 | 1:73fc5aef174e | 12 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING |
graeme88 | 1:73fc5aef174e | 13 | * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
graeme88 | 1:73fc5aef174e | 14 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
graeme88 | 1:73fc5aef174e | 15 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
graeme88 | 1:73fc5aef174e | 16 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
graeme88 | 1:73fc5aef174e | 17 | */ |
graeme88 | 1:73fc5aef174e | 18 | |
graeme88 | 0:91e3e396bc6e | 19 | |
graeme88 | 0:91e3e396bc6e | 20 | #include "mbed.h" |
graeme88 | 0:91e3e396bc6e | 21 | |
graeme88 | 0:91e3e396bc6e | 22 | |
graeme88 | 0:91e3e396bc6e | 23 | #ifndef SHT21_ncleee |
graeme88 | 0:91e3e396bc6e | 24 | #define SHT21_ncleee |
graeme88 | 0:91e3e396bc6e | 25 | |
graeme88 | 0:91e3e396bc6e | 26 | /* |
graeme88 | 0:91e3e396bc6e | 27 | * Constants used in communication |
graeme88 | 0:91e3e396bc6e | 28 | * |
graeme88 | 0:91e3e396bc6e | 29 | * Refer to datasheet for full explanation |
graeme88 | 0:91e3e396bc6e | 30 | */ |
graeme88 | 0:91e3e396bc6e | 31 | |
graeme88 | 0:91e3e396bc6e | 32 | //Sensor I2C address |
graeme88 | 0:91e3e396bc6e | 33 | #define SHT_I2C_ADDR 0x80 |
graeme88 | 0:91e3e396bc6e | 34 | |
graeme88 | 0:91e3e396bc6e | 35 | //Commands... |
graeme88 | 0:91e3e396bc6e | 36 | //Trigger Temp with hold master |
graeme88 | 0:91e3e396bc6e | 37 | #define SHT_TRIG_TEMP_HOLD 0xE3 |
graeme88 | 0:91e3e396bc6e | 38 | //Trigger RH with hold master |
graeme88 | 0:91e3e396bc6e | 39 | #define SHT_TRIG_RH_HOLD 0xE5 |
graeme88 | 0:91e3e396bc6e | 40 | //Trigger Temp with no hold master |
graeme88 | 0:91e3e396bc6e | 41 | #define SHT_TRIG_TEMP 0xF3 |
graeme88 | 0:91e3e396bc6e | 42 | //Trigger RH with no hold master |
graeme88 | 0:91e3e396bc6e | 43 | #define SHT_TRIG_RH 0xF5 |
graeme88 | 0:91e3e396bc6e | 44 | //Write to user register |
graeme88 | 0:91e3e396bc6e | 45 | #define SHT_WRITE_REG 0xE6 |
graeme88 | 0:91e3e396bc6e | 46 | //Read from user register |
graeme88 | 0:91e3e396bc6e | 47 | #define SHT_READ_REG 0xE7 |
graeme88 | 0:91e3e396bc6e | 48 | //Soft reset the sensor |
graeme88 | 0:91e3e396bc6e | 49 | #define SHT_SOFT_RESET 0xFE |
graeme88 | 0:91e3e396bc6e | 50 | |
graeme88 | 0:91e3e396bc6e | 51 | //User Register information |
graeme88 | 0:91e3e396bc6e | 52 | |
graeme88 | 0:91e3e396bc6e | 53 | //Data precision settings |
graeme88 | 0:91e3e396bc6e | 54 | //RH 12 T 14 - default |
graeme88 | 0:91e3e396bc6e | 55 | #define SHT_PREC_1214 0x00 |
graeme88 | 0:91e3e396bc6e | 56 | //RH 8 T 10 |
graeme88 | 0:91e3e396bc6e | 57 | #define SHT_PREC_0812 0x01 |
graeme88 | 0:91e3e396bc6e | 58 | //RH 10 T 13 |
graeme88 | 0:91e3e396bc6e | 59 | #define SHT_PREC_1013 0x80 |
graeme88 | 0:91e3e396bc6e | 60 | //RH 11 T 11 |
graeme88 | 0:91e3e396bc6e | 61 | #define SHT_PREC_1111 0x81 |
graeme88 | 0:91e3e396bc6e | 62 | |
graeme88 | 0:91e3e396bc6e | 63 | //Battery status |
graeme88 | 0:91e3e396bc6e | 64 | #define SHT_BATTERY_STAT 0x40 |
graeme88 | 0:91e3e396bc6e | 65 | //Enable on chip heater |
graeme88 | 0:91e3e396bc6e | 66 | #define SHT_HEATER 0x04 |
graeme88 | 0:91e3e396bc6e | 67 | //Disable OTP reload |
graeme88 | 0:91e3e396bc6e | 68 | #define SHT_DISABLE_OTP 0x02 |
graeme88 | 0:91e3e396bc6e | 69 | |
graeme88 | 0:91e3e396bc6e | 70 | |
graeme88 | 0:91e3e396bc6e | 71 | //Fail conditions on the I2C bus |
graeme88 | 0:91e3e396bc6e | 72 | #define SHT_FAIL 1 |
graeme88 | 0:91e3e396bc6e | 73 | #define SHT_SUCCESS 0 |
graeme88 | 0:91e3e396bc6e | 74 | |
graeme88 | 0:91e3e396bc6e | 75 | //Author fail conditions |
graeme88 | 0:91e3e396bc6e | 76 | //1, 2, 3 can be used because these are status bits |
graeme88 | 0:91e3e396bc6e | 77 | //in the received measurement value |
graeme88 | 0:91e3e396bc6e | 78 | #define SHT_GOOD 0xFFFC |
graeme88 | 0:91e3e396bc6e | 79 | #define SHT_TRIG_FAIL 1 |
graeme88 | 0:91e3e396bc6e | 80 | #define SHT_READ_FAIL 2 |
graeme88 | 0:91e3e396bc6e | 81 | |
graeme88 | 1:73fc5aef174e | 82 | /** SHT21 Connection class, utilizing a I2C interface |
graeme88 | 1:73fc5aef174e | 83 | * |
graeme88 | 1:73fc5aef174e | 84 | * Example: |
graeme88 | 1:73fc5aef174e | 85 | * @code |
graeme88 | 1:73fc5aef174e | 86 | * #include "mbed.h" |
graeme88 | 1:73fc5aef174e | 87 | * #include "SHT21_ncleee.h" |
graeme88 | 1:73fc5aef174e | 88 | * |
graeme88 | 1:73fc5aef174e | 89 | * |
graeme88 | 1:73fc5aef174e | 90 | * DigitalOut myled(LED1); |
graeme88 | 1:73fc5aef174e | 91 | * Serial pc(USBTX, USBRX); |
graeme88 | 1:73fc5aef174e | 92 | * I2C i2c(p28,p27); |
graeme88 | 1:73fc5aef174e | 93 | * SHT21 sht(&i2c); |
graeme88 | 1:73fc5aef174e | 94 | * |
graeme88 | 1:73fc5aef174e | 95 | * int main() |
graeme88 | 1:73fc5aef174e | 96 | * { |
graeme88 | 1:73fc5aef174e | 97 | * |
graeme88 | 1:73fc5aef174e | 98 | * pc.printf("Hello World...\n\tTesting temperature Sensor\n"); |
graeme88 | 1:73fc5aef174e | 99 | * |
graeme88 | 1:73fc5aef174e | 100 | * int temperature = sht.readTemp(); |
graeme88 | 1:73fc5aef174e | 101 | * |
graeme88 | 1:73fc5aef174e | 102 | * pc.printf("Temperature is: %d \n", temperature); |
graeme88 | 1:73fc5aef174e | 103 | * |
graeme88 | 1:73fc5aef174e | 104 | * pc.printf("Experiment complete...\n"); |
graeme88 | 1:73fc5aef174e | 105 | * |
graeme88 | 2:1411bb5e8c0a | 106 | * } |
graeme88 | 2:1411bb5e8c0a | 107 | * |
graeme88 | 1:73fc5aef174e | 108 | * @endcode |
graeme88 | 1:73fc5aef174e | 109 | * |
graeme88 | 1:73fc5aef174e | 110 | * |
graeme88 | 1:73fc5aef174e | 111 | */ |
graeme88 | 0:91e3e396bc6e | 112 | class SHT21 |
graeme88 | 0:91e3e396bc6e | 113 | { |
graeme88 | 0:91e3e396bc6e | 114 | private: |
graeme88 | 0:91e3e396bc6e | 115 | I2C *_i2c; |
graeme88 | 3:03bbabb7b0b0 | 116 | // Serial *_pc; |
graeme88 | 0:91e3e396bc6e | 117 | int triggerTemp(); |
graeme88 | 0:91e3e396bc6e | 118 | int requestTemp(); |
graeme88 | 0:91e3e396bc6e | 119 | unsigned short temperature; |
graeme88 | 0:91e3e396bc6e | 120 | int triggerRH(); |
graeme88 | 0:91e3e396bc6e | 121 | int requestRH(); |
graeme88 | 0:91e3e396bc6e | 122 | unsigned short humidity; |
graeme88 | 0:91e3e396bc6e | 123 | int wr(int cmd); |
graeme88 | 0:91e3e396bc6e | 124 | |
graeme88 | 0:91e3e396bc6e | 125 | public: |
graeme88 | 0:91e3e396bc6e | 126 | |
graeme88 | 0:91e3e396bc6e | 127 | /** Constructor - create a connection to a SHT21 temperature and humidity sensor |
graeme88 | 0:91e3e396bc6e | 128 | * through an I2C interface |
graeme88 | 0:91e3e396bc6e | 129 | * |
graeme88 | 0:91e3e396bc6e | 130 | * @param *i2c a pointer to the i2c interface that is used for communication |
graeme88 | 0:91e3e396bc6e | 131 | */ |
graeme88 | 0:91e3e396bc6e | 132 | SHT21(I2C *i2c); |
graeme88 | 1:73fc5aef174e | 133 | |
graeme88 | 1:73fc5aef174e | 134 | /** Read the temperature value from the sensor \n |
graeme88 | 1:73fc5aef174e | 135 | * |
graeme88 | 1:73fc5aef174e | 136 | * Involves triggering the measuring unit then |
graeme88 | 1:73fc5aef174e | 137 | * waiting for 100ms for the measuring to complete |
graeme88 | 1:73fc5aef174e | 138 | * before reading the temperature |
graeme88 | 1:73fc5aef174e | 139 | * |
graeme88 | 3:03bbabb7b0b0 | 140 | * @param returns a value representing the temperature in degrees centigrade |
graeme88 | 1:73fc5aef174e | 141 | */ |
graeme88 | 3:03bbabb7b0b0 | 142 | float readTemp(); |
graeme88 | 1:73fc5aef174e | 143 | |
graeme88 | 1:73fc5aef174e | 144 | /** Read the humidity value from the sensor \n |
graeme88 | 1:73fc5aef174e | 145 | * |
graeme88 | 1:73fc5aef174e | 146 | * Involves triggering the measuring unit then |
graeme88 | 1:73fc5aef174e | 147 | * waiting for 100ms for the measuring to complete |
graeme88 | 1:73fc5aef174e | 148 | * before reading the humidity |
graeme88 | 1:73fc5aef174e | 149 | * |
graeme88 | 3:03bbabb7b0b0 | 150 | * @param returns the percentage humidity |
graeme88 | 1:73fc5aef174e | 151 | */ |
graeme88 | 3:03bbabb7b0b0 | 152 | float readHumidity(); |
graeme88 | 1:73fc5aef174e | 153 | |
graeme88 | 1:73fc5aef174e | 154 | /** |
graeme88 | 1:73fc5aef174e | 155 | * Perform a soft-reset of the sensor unit. |
graeme88 | 1:73fc5aef174e | 156 | */ |
graeme88 | 0:91e3e396bc6e | 157 | int reset(); |
graeme88 | 1:73fc5aef174e | 158 | |
graeme88 | 1:73fc5aef174e | 159 | /** |
graeme88 | 1:73fc5aef174e | 160 | * Set the precision of the measuring |
graeme88 | 1:73fc5aef174e | 161 | * |
graeme88 | 2:1411bb5e8c0a | 162 | * //Data precision settings \n |
graeme88 | 2:1411bb5e8c0a | 163 | * //RH 12 T 14 - default \n |
graeme88 | 2:1411bb5e8c0a | 164 | * #define SHT_PREC_1214 0x00 \n |
graeme88 | 2:1411bb5e8c0a | 165 | * //RH 8 T 10 \n |
graeme88 | 2:1411bb5e8c0a | 166 | * #define SHT_PREC_0812 0x01 \n |
graeme88 | 2:1411bb5e8c0a | 167 | * //RH 10 T 13 \n |
graeme88 | 2:1411bb5e8c0a | 168 | * #define SHT_PREC_1013 0x80 \n |
graeme88 | 2:1411bb5e8c0a | 169 | * //RH 11 T 11 \n |
graeme88 | 2:1411bb5e8c0a | 170 | * #define SHT_PREC_1111 0x81 \n |
graeme88 | 1:73fc5aef174e | 171 | * |
graeme88 | 1:73fc5aef174e | 172 | * @param precision - the precision, refer to above or datasheet. |
graeme88 | 1:73fc5aef174e | 173 | * |
graeme88 | 1:73fc5aef174e | 174 | */ |
graeme88 | 0:91e3e396bc6e | 175 | int setPrecision(char precision); |
graeme88 | 0:91e3e396bc6e | 176 | |
graeme88 | 0:91e3e396bc6e | 177 | }; |
graeme88 | 0:91e3e396bc6e | 178 | |
graeme88 | 0:91e3e396bc6e | 179 | |
graeme88 | 0:91e3e396bc6e | 180 | #endif |