Library for Silicon Labs Si7006 digital temperature and humidity chip.
Dependents: acd52832_Humidity_Temp_Example iBeacon acnsensa acnSENSA
Si7006A20.h
- Committer:
- jurica238814
- Date:
- 2017-07-10
- Revision:
- 0:cc2c5d49fe63
- Child:
- 1:155934570c14
File content as of revision 0:cc2c5d49fe63:
/******************************************************************************* * 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" /** * Silicon Labs Si7006 Humidity and Temperature Sensor * * @code * #include <stdio.h> * #include "mbed.h" * #include "Si7006A20.h" * * I2C i2c(I2C_SDA, I2C_SCL); * Si7006 si(&i2c); * * int main() * { * while(1) { * * float humid; * if(si.getHumidity(&humid) != 0) { * printf("Error getting humidity\n"); * humid = -1; * } * * float temp; * if(si.getTemperature(&temp) != 0) { * printf("Error getting temperature"); * temp = -1; * } * printf("Humidity = %f%% Temperature = %fC\n", humid, temp); * * wait(1); * } * } * @endcode */ 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); /** * Si7006 constructor. * * @param i2c I2C object to use */ Si7006(I2C *i2c); /** * Si7006 destructor. */ ~Si7006(); /** * @brief Reset. * @details Sends the rest command. * @returns 0 if no errors, -1 if error. */ int reset(void); /** * @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. */ int 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 tempCx10 Pointer for temperature reading. Unit is 1/10th degree Celcius. * @returns 0 if no errors, -1 if error. */ int getTemperature(int16_t *tempCx10); /** * @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. */ int getTemperature(float *tempC); /** * @brief Start temperature reading. * @details Initiates a temperature reading. Will not hold the bus or block. * @returns 0 if no errors, -1 if error. */ int startTemperature(void); /** * @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 tempCx10 Pointer for temperature reading. Unit is 1/10th degree Celcius. * @returns 0 if reading taken, -1 if reading pending. */ int checkTemperature(int16_t *tempCx10); /** * @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. */ int checkTemperature(float *tempC); /** * @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. */ int getHumidity(int16_t *humidx10); /** * @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. */ int getHumidity(float *humid); /** * @brief Start humidity reading. * @details Initiates a humidity reading. Will not hold the bus or block. * @returns 0 if no errors, -1 if error. */ int startHumidity(void); /** * @brief Check humidity reading. * @details Checks to see if the humidity reading has been completed. Returns humidity if reading complete. * @note Must call startHumidity() prior to calling this function. * @param humidCx10 Pointer for humidity reading. Unit is 1/10th percent. * @returns 0 if reading taken, -1 if reading pending. */ int checkHumidity(int16_t *humidx10); /** * @brief Check humidity reading. * @details Checks to see if the humidity reading has been completed. Returns humidity if reading complete. * @note Must call startHumidity() prior to calling this function. * @param humid Pointer for humidity reading. Unit is percent. * @returns 0 if reading taken, -1 if reading pending. */ int checkHumidity(float *humid); /** * @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); I2C *i2c_; bool i2c_owner; }; #endif /* _Si7006_H_ */