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).
HIH6130.cpp@0:ed5a906c8e44, 2014-03-09 (annotated)
- Committer:
- spiridion
- Date:
- Sun Mar 09 16:53:11 2014 +0000
- Revision:
- 0:ed5a906c8e44
first release
Who changed what in which revision?
User | Revision | Line number | New 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 | } |