HIH6130 Humidity/Temperature Sensor library
Dependents: BLE_HIH6130_tinkering mbed_rifletool
Yet another HIH6130 library!
Honeywell HIH6130 is a relative humidity and temperature sensor which can be addressed through an I2C interface.
This library is based on the Honeywell documentation (/media/uploads/spiridion/i2c_comms_humidicon_tn_009061-2-en_final_07jun12.pdf) and as been tested on LPC1768 and FRM-KL25Z plateforms using the HIH6130 Sparkfun breakout (https://www.sparkfun.com/products/11295).
Diff: HIH6130.cpp
- Revision:
- 0:ed5a906c8e44
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HIH6130.cpp Sun Mar 09 16:53:11 2014 +0000 @@ -0,0 +1,84 @@ +/* + @file HIH6130.cpp + + @brief Humidity and Temperature Sensor HIH6130 Breakout I2C Library + + @Author spiridion (http://mailme.spiridion.net) + + Tested on LPC1768 and FRDM-KL25Z + + Copyright (c) 2014 spiridion + Released under the MIT License (see http://mbed.org/license/mit) + + Documentation regarding I2C communication with HIH6130 can be found here: + http://mbed.org/media/uploads/spiridion/i2c_comms_humidicon_tn_009061-2-en_final_07jun12.pdf +*/ + +#include "HIH6130.h" +#include "mbed.h" + +HIH6130::HIH6130(PinName sda, PinName scl, int address) : m_i2c(sda,scl), m_addr(address) +{ + m_temperature = UNSET_HI6130_TEMPERATURE_VALUE; + m_humidity = UNSET_HI6130_HUMIDITY_VALUE; +} + +HIH6130::HIH6130(I2C& i2c, int address) : m_i2c(i2c), m_addr(address) +{ + m_temperature = UNSET_HI6130_TEMPERATURE_VALUE; + m_humidity = UNSET_HI6130_HUMIDITY_VALUE; +} + +int HIH6130::ReadData(float* pTemperature, float* pHumidity) +{ + int rsl = Measurement(); + + if (rsl) + { + m_temperature = TrueTemperature(); + m_humidity = TrueHumidity(); + } + else + { + m_temperature = UNSET_HI6130_TEMPERATURE_VALUE; + m_humidity = UNSET_HI6130_HUMIDITY_VALUE; + } + + if (pTemperature) + *pTemperature = m_temperature; + if (pHumidity) + *pHumidity = m_humidity; + + return rsl; +} + +float HIH6130::TrueTemperature() +{ + // T = T_output / (2^14-2)*165-40 + return ( ( ((unsigned int)m_data[2] << 8) | (unsigned int)m_data[3] ) >> 2 ) * 0.010072F - 40; +} + +float HIH6130::TrueHumidity() +{ + // H = H_output /(2^14-2)*100 + return ( (((unsigned int)m_data[0] & 0x3f) << 8) | ((unsigned int)m_data[1] & 0xff) ) * 0.006104F; +} + +int HIH6130::Measurement() +{ + int errors; + + // Humidity and temperature measurement request + errors = m_i2c.write(m_addr, m_data, 1); + + wait_ms(10); + + // Humidity and temperature data fetch + errors += m_i2c.read(m_addr, m_data, 4); + + // Check data validity + if ( errors || !(m_data[0] & 0xC0)) + return 0; + + return 1; +}