HTS221 relative humidity and temperature sensor library
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Diff: HTS221Sensor.cpp
- Revision:
- 6:7021a2a1ac72
- Parent:
- 5:ccf7f36492ae
--- a/HTS221Sensor.cpp Wed Jul 24 14:17:21 2019 +0000 +++ b/HTS221Sensor.cpp Tue Sep 17 08:40:01 2019 +0000 @@ -250,6 +250,163 @@ return 0; } +/** + * @brief Get HTS221 heater configuration + * @param heater the pointer to the heater configuration + * @retval 0 in case of success, an error code otherwise + */ +int HTS221Sensor::get_heater(uint8_t *heater) +{ + HTS221_State_et heater_low_level; + + if (HTS221_Get_HeaterState((void *)this, &heater_low_level) == HTS221_ERROR) { + return 1; + } + + switch (heater_low_level) { + case HTS221_DISABLE: + *heater = 0; + break; + case HTS221_ENABLE: + *heater = 1; + break; + default: + return 1; + } + + return 0; +} + +/** + * @brief Set HTS221 heater configuration + * @param heater the heater configuration to be set + * @retval 0 in case of success, an error code otherwise + */ +int HTS221Sensor::set_heater(uint8_t heater) +{ + HTS221_State_et new_heater; + + new_heater = (heater == 0) ? HTS221_DISABLE + : HTS221_ENABLE; + + if (HTS221_Set_HeaterState((void *)this, new_heater) == HTS221_ERROR) { + return 1; + } + + return 0; +} + +/** + * @brief Get HTS221 averaging configuration + * @param avgh the pointer to the averaging for humidity, avgt the pointer to the averaging for temperature + * @retval 0 in case of success, an error code otherwise + */ +int HTS221Sensor::get_avg(float *avgh, float *avgt) +{ + HTS221_Avgh_et avgh_low_level; + HTS221_Avgt_et avgt_low_level; + + if (HTS221_Get_AvgHT((void *)this, &avgh_low_level, &avgt_low_level) == HTS221_ERROR) { + return 1; + } + + switch (avgh_low_level) { + case HTS221_AVGH_4: + *avgh = 4; + break; + case HTS221_AVGH_8: + *avgh = 8; + break; + case HTS221_AVGH_16: + *avgh = 16; + break; + case HTS221_AVGH_32: + *avgh = 32; + break; + case HTS221_AVGH_64: + *avgh = 64; + break; + case HTS221_AVGH_128: + *avgh = 128; + break; + case HTS221_AVGH_256: + *avgh = 256; + break; + case HTS221_AVGH_512: + *avgh = 512; + break; + default: + return 1; + } + + switch (avgt_low_level) { + case HTS221_AVGT_2: + *avgt = 2; + break; + case HTS221_AVGT_4: + *avgt = 4; + break; + case HTS221_AVGT_8: + *avgt = 8; + break; + case HTS221_AVGT_16: + *avgt = 16; + break; + case HTS221_AVGT_32: + *avgt = 32; + break; + case HTS221_AVGT_64: + *avgt = 64; + break; + case HTS221_AVGT_128: + *avgt = 128; + break; + case HTS221_AVGT_256: + *avgt = 256; + break; + default: + return 1; + } + + return 0; +} + +/** + * @brief Set HTS221 averaging configuration + * @param avgh the averagingfor humidity to be set, avgt the averaging for temperature to be set + * @retval 0 in case of success, an error code otherwise + */ +int HTS221Sensor::set_avg(float avgh, float avgt) +{ + HTS221_Avgh_et new_avgh; + HTS221_Avgt_et new_avgt; + + new_avgh = (avgh == 4) ? HTS221_AVGH_4 + : (avgh == 8) ? HTS221_AVGH_8 + : (avgh == 16) ? HTS221_AVGH_16 + : (avgh == 32) ? HTS221_AVGH_32 + : (avgh == 64) ? HTS221_AVGH_64 + : (avgh == 128) ? HTS221_AVGH_128 + : (avgh == 256) ? HTS221_AVGH_256 + : (avgh == 512) ? HTS221_AVGH_512 + : HTS221_AVGH_4; + + new_avgt = (avgt == 2) ? HTS221_AVGT_2 + : (avgt == 4) ? HTS221_AVGT_4 + : (avgt == 8) ? HTS221_AVGT_8 + : (avgt == 16) ? HTS221_AVGT_16 + : (avgt == 32) ? HTS221_AVGT_32 + : (avgt == 64) ? HTS221_AVGT_64 + : (avgt == 128) ? HTS221_AVGT_128 + : (avgt == 256) ? HTS221_AVGT_256 + : HTS221_AVGT_2; + + if (HTS221_Set_AvgHT((void *)this, new_avgh, new_avgt) == HTS221_ERROR) { + return 1; + } + + return 0; +} /** * @brief Read the data from register