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@1:73fc5aef174e, 2012-11-29 (annotated)
- Committer:
- graeme88
- Date:
- Thu Nov 29 10:48:06 2012 +0000
- Revision:
- 1:73fc5aef174e
- Parent:
- 0:91e3e396bc6e
- Child:
- 2:1411bb5e8c0a
updated documentation
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 | * SHT21 - Temperature and Humidity Sensor by Sensiron |
graeme88 | 0:91e3e396bc6e | 21 | * |
graeme88 | 0:91e3e396bc6e | 22 | * This is a driver to connect to the sensor using an mbed device through an I2C interface |
graeme88 | 0:91e3e396bc6e | 23 | * |
graeme88 | 0:91e3e396bc6e | 24 | * Author: Graeme Coapes - Newcastle University |
graeme88 | 0:91e3e396bc6e | 25 | * Email: graeme.coapes@ncl.ac.uk |
graeme88 | 0:91e3e396bc6e | 26 | * |
graeme88 | 0:91e3e396bc6e | 27 | * Date: 28/11/2012 |
graeme88 | 0:91e3e396bc6e | 28 | * |
graeme88 | 0:91e3e396bc6e | 29 | */ |
graeme88 | 0:91e3e396bc6e | 30 | |
graeme88 | 0:91e3e396bc6e | 31 | #include "mbed.h" |
graeme88 | 0:91e3e396bc6e | 32 | |
graeme88 | 0:91e3e396bc6e | 33 | |
graeme88 | 0:91e3e396bc6e | 34 | #ifndef SHT21_ncleee |
graeme88 | 0:91e3e396bc6e | 35 | #define SHT21_ncleee |
graeme88 | 0:91e3e396bc6e | 36 | |
graeme88 | 0:91e3e396bc6e | 37 | /* |
graeme88 | 0:91e3e396bc6e | 38 | * Constants used in communication |
graeme88 | 0:91e3e396bc6e | 39 | * |
graeme88 | 0:91e3e396bc6e | 40 | * Refer to datasheet for full explanation |
graeme88 | 0:91e3e396bc6e | 41 | */ |
graeme88 | 0:91e3e396bc6e | 42 | |
graeme88 | 0:91e3e396bc6e | 43 | //Sensor I2C address |
graeme88 | 0:91e3e396bc6e | 44 | #define SHT_I2C_ADDR 0x80 |
graeme88 | 0:91e3e396bc6e | 45 | |
graeme88 | 0:91e3e396bc6e | 46 | //Commands... |
graeme88 | 0:91e3e396bc6e | 47 | //Trigger Temp with hold master |
graeme88 | 0:91e3e396bc6e | 48 | #define SHT_TRIG_TEMP_HOLD 0xE3 |
graeme88 | 0:91e3e396bc6e | 49 | //Trigger RH with hold master |
graeme88 | 0:91e3e396bc6e | 50 | #define SHT_TRIG_RH_HOLD 0xE5 |
graeme88 | 0:91e3e396bc6e | 51 | //Trigger Temp with no hold master |
graeme88 | 0:91e3e396bc6e | 52 | #define SHT_TRIG_TEMP 0xF3 |
graeme88 | 0:91e3e396bc6e | 53 | //Trigger RH with no hold master |
graeme88 | 0:91e3e396bc6e | 54 | #define SHT_TRIG_RH 0xF5 |
graeme88 | 0:91e3e396bc6e | 55 | //Write to user register |
graeme88 | 0:91e3e396bc6e | 56 | #define SHT_WRITE_REG 0xE6 |
graeme88 | 0:91e3e396bc6e | 57 | //Read from user register |
graeme88 | 0:91e3e396bc6e | 58 | #define SHT_READ_REG 0xE7 |
graeme88 | 0:91e3e396bc6e | 59 | //Soft reset the sensor |
graeme88 | 0:91e3e396bc6e | 60 | #define SHT_SOFT_RESET 0xFE |
graeme88 | 0:91e3e396bc6e | 61 | |
graeme88 | 0:91e3e396bc6e | 62 | //User Register information |
graeme88 | 0:91e3e396bc6e | 63 | |
graeme88 | 0:91e3e396bc6e | 64 | //Data precision settings |
graeme88 | 0:91e3e396bc6e | 65 | //RH 12 T 14 - default |
graeme88 | 0:91e3e396bc6e | 66 | #define SHT_PREC_1214 0x00 |
graeme88 | 0:91e3e396bc6e | 67 | //RH 8 T 10 |
graeme88 | 0:91e3e396bc6e | 68 | #define SHT_PREC_0812 0x01 |
graeme88 | 0:91e3e396bc6e | 69 | //RH 10 T 13 |
graeme88 | 0:91e3e396bc6e | 70 | #define SHT_PREC_1013 0x80 |
graeme88 | 0:91e3e396bc6e | 71 | //RH 11 T 11 |
graeme88 | 0:91e3e396bc6e | 72 | #define SHT_PREC_1111 0x81 |
graeme88 | 0:91e3e396bc6e | 73 | |
graeme88 | 0:91e3e396bc6e | 74 | //Battery status |
graeme88 | 0:91e3e396bc6e | 75 | #define SHT_BATTERY_STAT 0x40 |
graeme88 | 0:91e3e396bc6e | 76 | //Enable on chip heater |
graeme88 | 0:91e3e396bc6e | 77 | #define SHT_HEATER 0x04 |
graeme88 | 0:91e3e396bc6e | 78 | //Disable OTP reload |
graeme88 | 0:91e3e396bc6e | 79 | #define SHT_DISABLE_OTP 0x02 |
graeme88 | 0:91e3e396bc6e | 80 | |
graeme88 | 0:91e3e396bc6e | 81 | |
graeme88 | 0:91e3e396bc6e | 82 | //Fail conditions on the I2C bus |
graeme88 | 0:91e3e396bc6e | 83 | #define SHT_FAIL 1 |
graeme88 | 0:91e3e396bc6e | 84 | #define SHT_SUCCESS 0 |
graeme88 | 0:91e3e396bc6e | 85 | |
graeme88 | 0:91e3e396bc6e | 86 | //Author fail conditions |
graeme88 | 0:91e3e396bc6e | 87 | //1, 2, 3 can be used because these are status bits |
graeme88 | 0:91e3e396bc6e | 88 | //in the received measurement value |
graeme88 | 0:91e3e396bc6e | 89 | #define SHT_GOOD 0xFFFC |
graeme88 | 0:91e3e396bc6e | 90 | #define SHT_TRIG_FAIL 1 |
graeme88 | 0:91e3e396bc6e | 91 | #define SHT_READ_FAIL 2 |
graeme88 | 0:91e3e396bc6e | 92 | |
graeme88 | 1:73fc5aef174e | 93 | /** SHT21 Connection class, utilizing a I2C interface |
graeme88 | 1:73fc5aef174e | 94 | * |
graeme88 | 1:73fc5aef174e | 95 | * Example: |
graeme88 | 1:73fc5aef174e | 96 | * @code |
graeme88 | 1:73fc5aef174e | 97 | * #include "mbed.h" |
graeme88 | 1:73fc5aef174e | 98 | * #include "SHT21_ncleee.h" |
graeme88 | 1:73fc5aef174e | 99 | * |
graeme88 | 1:73fc5aef174e | 100 | * |
graeme88 | 1:73fc5aef174e | 101 | * DigitalOut myled(LED1); |
graeme88 | 1:73fc5aef174e | 102 | * Serial pc(USBTX, USBRX); |
graeme88 | 1:73fc5aef174e | 103 | * I2C i2c(p28,p27); |
graeme88 | 1:73fc5aef174e | 104 | * SHT21 sht(&i2c); |
graeme88 | 1:73fc5aef174e | 105 | * |
graeme88 | 1:73fc5aef174e | 106 | * int main() |
graeme88 | 1:73fc5aef174e | 107 | * { |
graeme88 | 1:73fc5aef174e | 108 | * |
graeme88 | 1:73fc5aef174e | 109 | * pc.printf("Hello World...\n\tTesting temperature Sensor\n"); |
graeme88 | 1:73fc5aef174e | 110 | * |
graeme88 | 1:73fc5aef174e | 111 | * int temperature = sht.readTemp(); |
graeme88 | 1:73fc5aef174e | 112 | * |
graeme88 | 1:73fc5aef174e | 113 | * pc.printf("Temperature is: %d \n", temperature); |
graeme88 | 1:73fc5aef174e | 114 | * |
graeme88 | 1:73fc5aef174e | 115 | * pc.printf("Experiment complete...\n"); |
graeme88 | 1:73fc5aef174e | 116 | * |
graeme88 | 1:73fc5aef174e | 117 | } |
graeme88 | 1:73fc5aef174e | 118 | |
graeme88 | 1:73fc5aef174e | 119 | * @endcode |
graeme88 | 1:73fc5aef174e | 120 | * |
graeme88 | 1:73fc5aef174e | 121 | * |
graeme88 | 1:73fc5aef174e | 122 | */ |
graeme88 | 0:91e3e396bc6e | 123 | class SHT21 |
graeme88 | 0:91e3e396bc6e | 124 | { |
graeme88 | 0:91e3e396bc6e | 125 | private: |
graeme88 | 0:91e3e396bc6e | 126 | I2C *_i2c; |
graeme88 | 0:91e3e396bc6e | 127 | int triggerTemp(); |
graeme88 | 0:91e3e396bc6e | 128 | int requestTemp(); |
graeme88 | 0:91e3e396bc6e | 129 | unsigned short temperature; |
graeme88 | 0:91e3e396bc6e | 130 | int triggerRH(); |
graeme88 | 0:91e3e396bc6e | 131 | int requestRH(); |
graeme88 | 0:91e3e396bc6e | 132 | unsigned short humidity; |
graeme88 | 0:91e3e396bc6e | 133 | int wr(int cmd); |
graeme88 | 0:91e3e396bc6e | 134 | |
graeme88 | 0:91e3e396bc6e | 135 | public: |
graeme88 | 0:91e3e396bc6e | 136 | |
graeme88 | 0:91e3e396bc6e | 137 | /** Constructor - create a connection to a SHT21 temperature and humidity sensor |
graeme88 | 0:91e3e396bc6e | 138 | * through an I2C interface |
graeme88 | 0:91e3e396bc6e | 139 | * |
graeme88 | 0:91e3e396bc6e | 140 | * @param *i2c a pointer to the i2c interface that is used for communication |
graeme88 | 0:91e3e396bc6e | 141 | */ |
graeme88 | 0:91e3e396bc6e | 142 | SHT21(I2C *i2c); |
graeme88 | 1:73fc5aef174e | 143 | |
graeme88 | 1:73fc5aef174e | 144 | /** Read the temperature 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 temperature |
graeme88 | 1:73fc5aef174e | 149 | * |
graeme88 | 1:73fc5aef174e | 150 | * @param returns The temperature, a value of either 1,2 or 3 corresponds to an error |
graeme88 | 1:73fc5aef174e | 151 | */ |
graeme88 | 0:91e3e396bc6e | 152 | int readTemp(); |
graeme88 | 1:73fc5aef174e | 153 | |
graeme88 | 1:73fc5aef174e | 154 | /** Read the humidity value from the sensor \n |
graeme88 | 1:73fc5aef174e | 155 | * |
graeme88 | 1:73fc5aef174e | 156 | * Involves triggering the measuring unit then |
graeme88 | 1:73fc5aef174e | 157 | * waiting for 100ms for the measuring to complete |
graeme88 | 1:73fc5aef174e | 158 | * before reading the humidity |
graeme88 | 1:73fc5aef174e | 159 | * |
graeme88 | 1:73fc5aef174e | 160 | * @param returns The humidity, a value of either 1,2 or 3 corresponds to an error |
graeme88 | 1:73fc5aef174e | 161 | */ |
graeme88 | 0:91e3e396bc6e | 162 | int readHumidity(); |
graeme88 | 1:73fc5aef174e | 163 | |
graeme88 | 1:73fc5aef174e | 164 | /** |
graeme88 | 1:73fc5aef174e | 165 | * Perform a soft-reset of the sensor unit. |
graeme88 | 1:73fc5aef174e | 166 | */ |
graeme88 | 0:91e3e396bc6e | 167 | int reset(); |
graeme88 | 1:73fc5aef174e | 168 | |
graeme88 | 1:73fc5aef174e | 169 | /** |
graeme88 | 1:73fc5aef174e | 170 | * Set the precision of the measuring |
graeme88 | 1:73fc5aef174e | 171 | * |
graeme88 | 1:73fc5aef174e | 172 | * //Data precision settings |
graeme88 | 1:73fc5aef174e | 173 | * //RH 12 T 14 - default |
graeme88 | 1:73fc5aef174e | 174 | * #define SHT_PREC_1214 0x00 |
graeme88 | 1:73fc5aef174e | 175 | * //RH 8 T 10 |
graeme88 | 1:73fc5aef174e | 176 | * #define SHT_PREC_0812 0x01 |
graeme88 | 1:73fc5aef174e | 177 | * //RH 10 T 13 |
graeme88 | 1:73fc5aef174e | 178 | * #define SHT_PREC_1013 0x80 |
graeme88 | 1:73fc5aef174e | 179 | * //RH 11 T 11 |
graeme88 | 1:73fc5aef174e | 180 | * #define SHT_PREC_1111 0x81 |
graeme88 | 1:73fc5aef174e | 181 | * |
graeme88 | 1:73fc5aef174e | 182 | * @param precision - the precision, refer to above or datasheet. |
graeme88 | 1:73fc5aef174e | 183 | * |
graeme88 | 1:73fc5aef174e | 184 | */ |
graeme88 | 0:91e3e396bc6e | 185 | int setPrecision(char precision); |
graeme88 | 0:91e3e396bc6e | 186 | |
graeme88 | 0:91e3e396bc6e | 187 | }; |
graeme88 | 0:91e3e396bc6e | 188 | |
graeme88 | 0:91e3e396bc6e | 189 | |
graeme88 | 0:91e3e396bc6e | 190 | #endif |