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:51:56 2012 +0000
Revision:
2:1411bb5e8c0a
Parent:
1:73fc5aef174e
Child:
3:03bbabb7b0b0
more documentation updates

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 #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 0:91e3e396bc6e 116 int triggerTemp();
graeme88 0:91e3e396bc6e 117 int requestTemp();
graeme88 0:91e3e396bc6e 118 unsigned short temperature;
graeme88 0:91e3e396bc6e 119 int triggerRH();
graeme88 0:91e3e396bc6e 120 int requestRH();
graeme88 0:91e3e396bc6e 121 unsigned short humidity;
graeme88 0:91e3e396bc6e 122 int wr(int cmd);
graeme88 0:91e3e396bc6e 123
graeme88 0:91e3e396bc6e 124 public:
graeme88 0:91e3e396bc6e 125
graeme88 0:91e3e396bc6e 126 /** Constructor - create a connection to a SHT21 temperature and humidity sensor
graeme88 0:91e3e396bc6e 127 * through an I2C interface
graeme88 0:91e3e396bc6e 128 *
graeme88 0:91e3e396bc6e 129 * @param *i2c a pointer to the i2c interface that is used for communication
graeme88 0:91e3e396bc6e 130 */
graeme88 0:91e3e396bc6e 131 SHT21(I2C *i2c);
graeme88 1:73fc5aef174e 132
graeme88 1:73fc5aef174e 133 /** Read the temperature value from the sensor \n
graeme88 1:73fc5aef174e 134 *
graeme88 1:73fc5aef174e 135 * Involves triggering the measuring unit then
graeme88 1:73fc5aef174e 136 * waiting for 100ms for the measuring to complete
graeme88 1:73fc5aef174e 137 * before reading the temperature
graeme88 1:73fc5aef174e 138 *
graeme88 1:73fc5aef174e 139 * @param returns The temperature, a value of either 1,2 or 3 corresponds to an error
graeme88 1:73fc5aef174e 140 */
graeme88 0:91e3e396bc6e 141 int readTemp();
graeme88 1:73fc5aef174e 142
graeme88 1:73fc5aef174e 143 /** Read the humidity value from the sensor \n
graeme88 1:73fc5aef174e 144 *
graeme88 1:73fc5aef174e 145 * Involves triggering the measuring unit then
graeme88 1:73fc5aef174e 146 * waiting for 100ms for the measuring to complete
graeme88 1:73fc5aef174e 147 * before reading the humidity
graeme88 1:73fc5aef174e 148 *
graeme88 1:73fc5aef174e 149 * @param returns The humidity, a value of either 1,2 or 3 corresponds to an error
graeme88 1:73fc5aef174e 150 */
graeme88 0:91e3e396bc6e 151 int readHumidity();
graeme88 1:73fc5aef174e 152
graeme88 1:73fc5aef174e 153 /**
graeme88 1:73fc5aef174e 154 * Perform a soft-reset of the sensor unit.
graeme88 1:73fc5aef174e 155 */
graeme88 0:91e3e396bc6e 156 int reset();
graeme88 1:73fc5aef174e 157
graeme88 1:73fc5aef174e 158 /**
graeme88 1:73fc5aef174e 159 * Set the precision of the measuring
graeme88 1:73fc5aef174e 160 *
graeme88 2:1411bb5e8c0a 161 * //Data precision settings \n
graeme88 2:1411bb5e8c0a 162 * //RH 12 T 14 - default \n
graeme88 2:1411bb5e8c0a 163 * #define SHT_PREC_1214 0x00 \n
graeme88 2:1411bb5e8c0a 164 * //RH 8 T 10 \n
graeme88 2:1411bb5e8c0a 165 * #define SHT_PREC_0812 0x01 \n
graeme88 2:1411bb5e8c0a 166 * //RH 10 T 13 \n
graeme88 2:1411bb5e8c0a 167 * #define SHT_PREC_1013 0x80 \n
graeme88 2:1411bb5e8c0a 168 * //RH 11 T 11 \n
graeme88 2:1411bb5e8c0a 169 * #define SHT_PREC_1111 0x81 \n
graeme88 1:73fc5aef174e 170 *
graeme88 1:73fc5aef174e 171 * @param precision - the precision, refer to above or datasheet.
graeme88 1:73fc5aef174e 172 *
graeme88 1:73fc5aef174e 173 */
graeme88 0:91e3e396bc6e 174 int setPrecision(char precision);
graeme88 0:91e3e396bc6e 175
graeme88 0:91e3e396bc6e 176 };
graeme88 0:91e3e396bc6e 177
graeme88 0:91e3e396bc6e 178
graeme88 0:91e3e396bc6e 179 #endif