Library for Silicon Labs Si7006 digital temperature and humidity chip.
Dependents: acd52832_Humidity_Temp_Example iBeacon acnsensa acnSENSA
Si7006A20.h
- Committer:
- jurica238814
- Date:
- 2017-09-25
- Revision:
- 1:155934570c14
- Parent:
- 0:cc2c5d49fe63
- Child:
- 2:7c3c7db34528
File content as of revision 1:155934570c14:
/******************************************************************************* * Copyright (C) 2015 Maxim Integrated Products, Inc., All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * * The library is modified to suite Si7006A20 Humidity and Temperature Sesor * Made by Jurica Resetar @ aconno * More info and contact: aconno.de * ******************************************************************************* */ #ifndef _Si70006A20_H_ #define _Si70006A20_H_ #include "mbed.h" #include "aconno_i2c.h" /***** Definitions *****/ #define I2C_ADDR (0x80) // 1000000x #define POLYVAL (0x131) class Si7006{ public: /** * @brief Measurement resolution. * @details Controls the resolution of the humidity and temperarure readings. */ typedef enum { RH_12b_TEMP_14b = 0x0, ///< 12 bits for RH, 14 bits for Temp RH_8b_TEMP_12b = 0x1, ///< 8 bits for RH, 12 bits for Temp RH_10b_TEMP_13b = 0x2, ///< 10 bits for RH, 13 bits for Temp RH_11b_TEMP_11b = 0x3, ///< 11 bits for RH, 11 bits for Temp } resolution_t; /** * Si7006 constructor. * * @param sda mbed pin to use for SDA line of I2C interface. * @param scl mbed pin to use for SCL line of I2C interface. */ Si7006(PinName sda, PinName scl); /** * @brief Get Electronic ID. * @details Gets the Electronic ID of the connected device. Verifies the * ID with an 8-bit CRC. * * @param Character buffer to store the id. Needs to be at least 8 bytes. * @returns 0 if no errors, -1 if error. */ uint8_t getElectronicId(char *id); /** * @brief Configure sample resolution. * @details Sets the number of bits used for humidity and temperature readings. * @param resolution Enum for the resolution setting. * @returns 0 if no errors, -1 if error. */ int configResolution(Si7006::resolution_t resolution); /** * @brief Get temperature reading. * @details Initiates a temperature reading and blocks until reading has * been calculated. * * @note Will hold the I2C bus until reading is complete. Refer to datasheet * for timing specifications. * * @param tempC Pointer for temperature reading. Unit is degree Celcius. * @returns 0 if no errors, -1 if error. */ float getTemperature(); /** * @brief Check temperature reading. * @details Checks to see if the temperature reading has been completed. Returns temperature if reading complete. * @note Must call startTemperature() prior to calling this function. * @param tempC Pointer for temperature reading. Unit is degree Celcius. * @returns 0 if reading taken, -1 if reading pending. */ float calculateTemperature(char *rawTemp); /** * @brief Get humidity reading. * @details Initiates a humidity reading and blocks until reading has * been calculated. * * @note Will hold the I2C bus until reading is complete. Refer to datasheet * for timing specifications. * * @param humidx10 Pointer for humidity reading. Unit is 1/10th percent. * @returns 0 if no errors, -1 if error. */ float getHumidity(); /** * @brief Get humidity reading. * @details Initiates a humidity reading and blocks until reading has * been calculated. * * @note Will hold the I2C bus until reading is complete. Refer to datasheet * for timing specifications. * * @param humid Pointer for humidity reading. Unit is percent. * @returns 0 if no errors, -1 if error. */ float checkHumidity(char *rawHumidity); /** * @brief Get temperature from humidity reading. * @details Gets temperature reading from previous humidity reading. * @note Must call startHumidity() prior to calling this function. * @param tempC Pointer for temperature reading. Unit is degree Celcius. * @returns 0 if reading taken, -1 if reading pending. */ int getPrevTemperature(float* tempC); /** * @brief Get temperature from humidity reading. * @details Gets temperature reading from previous humidity reading. * @note Must call startHumidity() prior to calling this function. * @param tempCx10 Pointer for temperature reading. Unit is 1/10th degree Celcius. * @returns 0 if reading taken, -1 if reading pending. */ int getPrevTemperature(int16_t *tempCx10); /** * @brief Get firmware revision. * @details Reads the firmware revision, refer to datasheet for codes. * @param rev Pointer to store firmware revision. * @returns 0 if no errors, -1 if error. */ int getRev(char *rev); /** * @brief Control heater. * @details Enable or disable the heater. * @param enable True to enable heater, false to disable. * @returns 0 if no errors, -1 if error. */ int heater(bool enable); private: char crc8(char value, char seed); aconno_i2c i2c; bool i2c_owner; }; #endif /* _Si7006_H_ */