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).

Committer:
spiridion
Date:
Sun Mar 09 16:53:11 2014 +0000
Revision:
0:ed5a906c8e44
first release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
spiridion 0:ed5a906c8e44 1 /*
spiridion 0:ed5a906c8e44 2 @file HIH6130.cpp
spiridion 0:ed5a906c8e44 3
spiridion 0:ed5a906c8e44 4 @brief Humidity and Temperature Sensor HIH6130 Breakout I2C Library
spiridion 0:ed5a906c8e44 5
spiridion 0:ed5a906c8e44 6 @Author spiridion (http://mailme.spiridion.net)
spiridion 0:ed5a906c8e44 7
spiridion 0:ed5a906c8e44 8 Tested on LPC1768 and FRDM-KL25Z
spiridion 0:ed5a906c8e44 9
spiridion 0:ed5a906c8e44 10 Copyright (c) 2014 spiridion
spiridion 0:ed5a906c8e44 11 Released under the MIT License (see http://mbed.org/license/mit)
spiridion 0:ed5a906c8e44 12
spiridion 0:ed5a906c8e44 13 Documentation regarding I2C communication with HIH6130 can be found here:
spiridion 0:ed5a906c8e44 14 http://mbed.org/media/uploads/spiridion/i2c_comms_humidicon_tn_009061-2-en_final_07jun12.pdf
spiridion 0:ed5a906c8e44 15 */
spiridion 0:ed5a906c8e44 16
spiridion 0:ed5a906c8e44 17 #include "HIH6130.h"
spiridion 0:ed5a906c8e44 18 #include "mbed.h"
spiridion 0:ed5a906c8e44 19
spiridion 0:ed5a906c8e44 20 HIH6130::HIH6130(PinName sda, PinName scl, int address) : m_i2c(sda,scl), m_addr(address)
spiridion 0:ed5a906c8e44 21 {
spiridion 0:ed5a906c8e44 22 m_temperature = UNSET_HI6130_TEMPERATURE_VALUE;
spiridion 0:ed5a906c8e44 23 m_humidity = UNSET_HI6130_HUMIDITY_VALUE;
spiridion 0:ed5a906c8e44 24 }
spiridion 0:ed5a906c8e44 25
spiridion 0:ed5a906c8e44 26 HIH6130::HIH6130(I2C& i2c, int address) : m_i2c(i2c), m_addr(address)
spiridion 0:ed5a906c8e44 27 {
spiridion 0:ed5a906c8e44 28 m_temperature = UNSET_HI6130_TEMPERATURE_VALUE;
spiridion 0:ed5a906c8e44 29 m_humidity = UNSET_HI6130_HUMIDITY_VALUE;
spiridion 0:ed5a906c8e44 30 }
spiridion 0:ed5a906c8e44 31
spiridion 0:ed5a906c8e44 32 int HIH6130::ReadData(float* pTemperature, float* pHumidity)
spiridion 0:ed5a906c8e44 33 {
spiridion 0:ed5a906c8e44 34 int rsl = Measurement();
spiridion 0:ed5a906c8e44 35
spiridion 0:ed5a906c8e44 36 if (rsl)
spiridion 0:ed5a906c8e44 37 {
spiridion 0:ed5a906c8e44 38 m_temperature = TrueTemperature();
spiridion 0:ed5a906c8e44 39 m_humidity = TrueHumidity();
spiridion 0:ed5a906c8e44 40 }
spiridion 0:ed5a906c8e44 41 else
spiridion 0:ed5a906c8e44 42 {
spiridion 0:ed5a906c8e44 43 m_temperature = UNSET_HI6130_TEMPERATURE_VALUE;
spiridion 0:ed5a906c8e44 44 m_humidity = UNSET_HI6130_HUMIDITY_VALUE;
spiridion 0:ed5a906c8e44 45 }
spiridion 0:ed5a906c8e44 46
spiridion 0:ed5a906c8e44 47 if (pTemperature)
spiridion 0:ed5a906c8e44 48 *pTemperature = m_temperature;
spiridion 0:ed5a906c8e44 49 if (pHumidity)
spiridion 0:ed5a906c8e44 50 *pHumidity = m_humidity;
spiridion 0:ed5a906c8e44 51
spiridion 0:ed5a906c8e44 52 return rsl;
spiridion 0:ed5a906c8e44 53 }
spiridion 0:ed5a906c8e44 54
spiridion 0:ed5a906c8e44 55 float HIH6130::TrueTemperature()
spiridion 0:ed5a906c8e44 56 {
spiridion 0:ed5a906c8e44 57 // T = T_output / (2^14-2)*165-40
spiridion 0:ed5a906c8e44 58 return ( ( ((unsigned int)m_data[2] << 8) | (unsigned int)m_data[3] ) >> 2 ) * 0.010072F - 40;
spiridion 0:ed5a906c8e44 59 }
spiridion 0:ed5a906c8e44 60
spiridion 0:ed5a906c8e44 61 float HIH6130::TrueHumidity()
spiridion 0:ed5a906c8e44 62 {
spiridion 0:ed5a906c8e44 63 // H = H_output /(2^14-2)*100
spiridion 0:ed5a906c8e44 64 return ( (((unsigned int)m_data[0] & 0x3f) << 8) | ((unsigned int)m_data[1] & 0xff) ) * 0.006104F;
spiridion 0:ed5a906c8e44 65 }
spiridion 0:ed5a906c8e44 66
spiridion 0:ed5a906c8e44 67 int HIH6130::Measurement()
spiridion 0:ed5a906c8e44 68 {
spiridion 0:ed5a906c8e44 69 int errors;
spiridion 0:ed5a906c8e44 70
spiridion 0:ed5a906c8e44 71 // Humidity and temperature measurement request
spiridion 0:ed5a906c8e44 72 errors = m_i2c.write(m_addr, m_data, 1);
spiridion 0:ed5a906c8e44 73
spiridion 0:ed5a906c8e44 74 wait_ms(10);
spiridion 0:ed5a906c8e44 75
spiridion 0:ed5a906c8e44 76 // Humidity and temperature data fetch
spiridion 0:ed5a906c8e44 77 errors += m_i2c.read(m_addr, m_data, 4);
spiridion 0:ed5a906c8e44 78
spiridion 0:ed5a906c8e44 79 // Check data validity
spiridion 0:ed5a906c8e44 80 if ( errors || !(m_data[0] & 0xC0))
spiridion 0:ed5a906c8e44 81 return 0;
spiridion 0:ed5a906c8e44 82
spiridion 0:ed5a906c8e44 83 return 1;
spiridion 0:ed5a906c8e44 84 }