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

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?

UserRevisionLine numberNew 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