Direct copy of the library, but apparently I made a change?
Fork of SHTx by
Diff: sht15.hpp
- Revision:
- 0:d55659b0c4a0
- Child:
- 1:8465801be23f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sht15.hpp Thu Nov 18 10:23:43 2010 +0000 @@ -0,0 +1,249 @@ +/** + * Copyright (c) 2010 Roy van Dam <roy@negative-black.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef _SHT15_HPP_ +#define _SHT15_HPP_ + +#include "mbed.h" +#include "i2c.hpp" + +namespace SHTx { + /** + * Class: SHT15 + * Humidity and Temperature Sensor - SHT15 + * High level software interface. + */ + class SHT15 { + private: + I2C i2c; + + bool ready; + bool scale; + + uint8_t status_register; + uint16_t humidity; + uint16_t temperature; + + struct coefficients { + // Humidity conversion coefficients + float c1[2], c2[2], c3[2]; + + // Temperature conversion coefficients + float dc[2], df[2], dv[2]; + + // Temperature compensation coefficients + float t1[2], t2[2]; + + // Initialize table + coefficients(void) { + c1[0] = -2.046f; c2[1] = -2.046f; + c2[0] = 0.036f; c2[1] = 0.587f; + c3[0] = -0.0000015955f; c2[1] = -0.00040845f; + + dc[0] = 0.01f; dc[1] = 0.04f; + df[0] = 0.018f; df[1] = 0.072f; + dv[0] = -39.7f; dv[1] = -39.5f; + + t1[0] = 0.01f; t1[1] = 0.01f; + t2[0] = 0.00008f; t2[1] = 0.00128f; + }; + } coefficient; + + enum cmd_list { + cmd_read_temperature = 0x03, + cmd_read_humidity = 0x05, + cmd_read_register = 0x07, + cmd_write_register = 0x06, + cmd_reset_device = 0x1E + }; + + enum flag_list { + flag_resolution = 0x01, + flag_reset = 0x02, + flag_heater = 0x04, + flag_battery = 0x40 + }; + + public: + /* + * Initializes I2C interface and waits + * the 11ms device initialization time. + */ + SHT15(PinName sda, PinName scl); + + /** + * Function: getTemperature + * Returns the current temperature. + * + * Values: + * returns - current temperature. + */ + float getTemperature(void); + + /** + * Function: getHumidity + * Returns the current relative humidity. + * + * Values: + * returns - relative humidity. + */ + float getHumidity(void); + + /** + * Function: checkBattery + * Returns true if battery voltage drops + * below 2.4 volt. + * + * Values: + * returns - true on low battery, false otherwise + */ + bool checkBattery(void); + + /** + * Function: setHeater + * Enable on chip heating element. The heater may + * increase the temperature of the sensor by 5C to + * 10C beyond ambient temperature. + * + * Values: + * value - true->on, false->off + * return - operation result + */ + bool setHeater(bool value); + + /** + * Function: setResolution + * Set lower measurement resolution to allow + * faster update frequencies. + * + * Resolutions + * low: 8bit humid. - 12bit temp. + * high: 12bit humid. - 14bit temp. + * + * Values: + * value - true->low, false->high + * return - operation result + */ + bool setResolution(bool value); + + /** + * Function: setScale + * Sets output scale to fahrenheit or celcius. + * + * Values: + * value - true->fahrenheit, false->celcius + */ + void setScale(bool value); + + /** + * Function: update + * Performs humidity and temperature + * sensor readout of the chip. + * + * Values: + * return - operation result + */ + bool update(void); + + /** + * Function: reset + * Performs full chip reset. + * + * Values: + * return - operation result + */ + bool reset(void); + + private: + + /** + * Function: convertTemperature + * Convert sensor data to human readable value + * on the farenheit or celcius scale. + * + * Values: + * sot - raw temperatue sensor output + * res - true->low, false->high + * scale - true->fahrenheit, false->celcius + * return - temperature + */ + float convertTemperature(uint16_t sot, bool res = false, bool scale = false); + + /** + * Function: convertHumidity + * Convert sensor data to relative humidity + * in percentage. + * + * Values: + * sohr - raw humidity sensor output + * sot - raw temperatue sensor output + * res - true->low, false->high + * return - relative humidity + */ + float convertHumidity(uint16_t sohr, uint16_t sot, bool res = false); + + /** + * Function: writeRegister + * Write internal chip register. + * + * Values: + * return - operation result + */ + bool writeRegister(void); + + /** + * Function: readRegister + * Reads internal chip register + * + * Values: + * command - register to be accessed + * return - operation result + */ + bool readRegister(cmd_list command); + + /** + * Function: setFlag + * Modify local register flag. + * + * Values: + * flag - flag to be modified + * value - value to be assigned + */ + void setFlag(flag_list flag, bool value); + + /** + * Function: getFlag + * Get local register flag. + * + * Values: + * returns - flag value + */ + bool getFlag(flag_list flag); + }; +} + +/* !_SHT15_HPP_ */ +#endif \ No newline at end of file