Changed hts221 into Class.

Dependents:   WeatherSensor-Joe PAG-CourseWork-NicksEdits SOFT253_Assignment SOFT253_Assignment_V2 ... more

Fork of hts221 by Kyle Rodgers

Committer:
kholland
Date:
Wed Feb 10 19:13:37 2016 +0000
Revision:
2:6d7166d49741
Parent:
1:da79e74eadd1
Added powerMode function to put it in shutdown

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gillwei7 0:030da9425166 1 /* Copyright (c) 2009 Nordic Semiconductor. All Rights Reserved.
gillwei7 0:030da9425166 2 *
gillwei7 0:030da9425166 3 * The information contained herein is property of Nordic Semiconductor ASA.
gillwei7 0:030da9425166 4 * Terms and conditions of usage are described in detail in NORDIC
gillwei7 0:030da9425166 5 * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
gillwei7 0:030da9425166 6 *
gillwei7 0:030da9425166 7 * Licensees are granted free, non-transferable use of the information. NO
gillwei7 0:030da9425166 8 * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
gillwei7 0:030da9425166 9 * the file.
gillwei7 0:030da9425166 10 *
gillwei7 0:030da9425166 11 */
gillwei7 0:030da9425166 12
gillwei7 0:030da9425166 13 #ifndef HTS221_H
gillwei7 0:030da9425166 14 #define HTS221_H
gillwei7 0:030da9425166 15
gillwei7 0:030da9425166 16 /*lint ++flb "Enter library region" */
gillwei7 0:030da9425166 17
gillwei7 0:030da9425166 18 #include <stdbool.h>
gillwei7 0:030da9425166 19 #include <stdint.h>
gillwei7 0:030da9425166 20
gillwei7 0:030da9425166 21 #define ADDRESS_WHO_AM_I (0x0FU) //!< WHO_AM_I register identifies the device. Expected value is 0xBC.
gillwei7 0:030da9425166 22
gillwei7 0:030da9425166 23 #define HTS221_WriteADDE 0xBE
gillwei7 0:030da9425166 24 #define HTS221_ReadADDE 0xBF
gillwei7 0:030da9425166 25 #define HTS221_TempHumi_OUT 0x28
gillwei7 0:030da9425166 26 #define HTS221_CALIB 0x30
gillwei7 0:030da9425166 27
gillwei7 0:030da9425166 28 #define MaxTemp 120
gillwei7 0:030da9425166 29 #define MinTemp -40
gillwei7 0:030da9425166 30 #define MaxHumi 100
gillwei7 0:030da9425166 31 #define MinHumi 0
gillwei7 0:030da9425166 32
gillwei7 0:030da9425166 33 // Humidity and temperature resolution mode, to ocnfigure sample average
gillwei7 0:030da9425166 34 #define TRes_1 000 // Number of temperature samples take 2^1,2^2...etc.
gillwei7 0:030da9425166 35 #define TRes_2 001
gillwei7 0:030da9425166 36 #define TRes_3 010
gillwei7 0:030da9425166 37 #define TRes_4 011
gillwei7 0:030da9425166 38 #define TRes_5 100
gillwei7 0:030da9425166 39 #define TRes_6 101
gillwei7 0:030da9425166 40 #define TRes_7 102
gillwei7 0:030da9425166 41 #define TRes_8 103
gillwei7 0:030da9425166 42
gillwei7 0:030da9425166 43 #define HRes_2 000 // Number of humidity samples take 2^2,2^3...etc.
gillwei7 0:030da9425166 44 #define HRes_3 001
gillwei7 0:030da9425166 45 #define HRes_4 010
gillwei7 0:030da9425166 46 #define HRes_5 011
gillwei7 0:030da9425166 47 #define HRes_6 100
gillwei7 0:030da9425166 48 #define HRes_7 101
gillwei7 0:030da9425166 49 #define HRes_8 102
gillwei7 0:030da9425166 50 #define HRes_9 103
gillwei7 0:030da9425166 51
gillwei7 0:030da9425166 52 // Control register 1
gillwei7 0:030da9425166 53 #define PD_On 0x80 // Power down mode
gillwei7 0:030da9425166 54 #define PD_Off 0x00 // Active mode
gillwei7 0:030da9425166 55
gillwei7 0:030da9425166 56 #define BDU_On 0x04 // Block data update, this feature prevents the reading of LSB and MSB related to different samples.
gillwei7 0:030da9425166 57 #define BDU_Off 0x00
gillwei7 0:030da9425166 58 // Define output data rate
gillwei7 0:030da9425166 59 #define ODR_OneShot 0x00
gillwei7 0:030da9425166 60 #define ODR_1Hz 0x01
gillwei7 0:030da9425166 61 #define ODR_7Hz 0x02
gillwei7 0:030da9425166 62 #define ODR_12_5Hz 0x03
gillwei7 0:030da9425166 63 // Control register 2
gillwei7 0:030da9425166 64 #define Boot 0x80
gillwei7 0:030da9425166 65 #define NoBoot 0x00
gillwei7 0:030da9425166 66 #define HeaterOn 0x02
gillwei7 0:030da9425166 67 #define HeaterOff 0x00
gillwei7 0:030da9425166 68 #define New_OS 0x01 // One shot, a single acquisition of temperature and humidity is started
gillwei7 0:030da9425166 69 #define No_OS 0x00
gillwei7 0:030da9425166 70 // Control register 3
gillwei7 0:030da9425166 71 #define DRDY_H 0x00 // Data Ready output signal active high(default)
gillwei7 0:030da9425166 72 #define DRDY_L 0x80 // Data Ready output signal active low
gillwei7 0:030da9425166 73 #define PP_OD_PP 0x00 // Push-pull on PIN3(DRDY)(default)
gillwei7 0:030da9425166 74 #define PP_OD_OD 0x40 // Open Drain on PIN3(DRDY)
gillwei7 0:030da9425166 75 #define DRDY_EN 0x04 // Data Ready enable
gillwei7 0:030da9425166 76 #define DRDY_NON 0x00 // Data Ready disable(default)
gillwei7 0:030da9425166 77
gillwei7 0:030da9425166 78 // Status register
gillwei7 0:030da9425166 79 #define H_DA_On 0x02 // Humidity data avialable, set to 1 whenever a new humidity sample is available.
gillwei7 0:030da9425166 80 #define H_DA_Off 0x00
gillwei7 0:030da9425166 81 #define T_DA_On 0x01 // Temperature data avialable, set to 1 whenever a new humidity sample is available.
gillwei7 0:030da9425166 82 #define T_DA_Off 0x00
gillwei7 0:030da9425166 83
kylerodgers 1:da79e74eadd1 84 class HTS221{
kylerodgers 1:da79e74eadd1 85 public:
kholland 2:6d7166d49741 86 enum PowerMode {
kholland 2:6d7166d49741 87 POWER_NORMAL,
kholland 2:6d7166d49741 88 POWER_SHUTDOWN /**< Chip is in low-power shutdown mode */
kholland 2:6d7166d49741 89 };
kylerodgers 1:da79e74eadd1 90 HTS221 (PinName sda, PinName scl);
kylerodgers 1:da79e74eadd1 91 void calib(void);
kylerodgers 1:da79e74eadd1 92 bool init(void);
kylerodgers 1:da79e74eadd1 93 void ReadTempHumi( float *pTemp , float *pHumi);
kholland 2:6d7166d49741 94 void powerMode(PowerMode mode);
kylerodgers 1:da79e74eadd1 95
kylerodgers 1:da79e74eadd1 96 private:
kylerodgers 1:da79e74eadd1 97 void register_write(uint8_t register_address, const uint8_t value);
kylerodgers 1:da79e74eadd1 98 void register_read(char register_address, char *destination, uint8_t number_of_bytes);
kylerodgers 1:da79e74eadd1 99 bool verify_product_id(void);
kylerodgers 1:da79e74eadd1 100 float linear_interpolation(int16_t x0, float y0, int16_t x1, float y1, float mes);
kylerodgers 1:da79e74eadd1 101
kylerodgers 1:da79e74eadd1 102 I2C _i2c;
kylerodgers 1:da79e74eadd1 103
kylerodgers 1:da79e74eadd1 104 static const char expected_who_am_i = 0xBCU; //!< Expected value to get from WHO_AM_I register.
gillwei7 0:030da9425166 105
kylerodgers 1:da79e74eadd1 106 uint8_t H0_rH_x2;
kylerodgers 1:da79e74eadd1 107 uint8_t H1_rH_x2;
kylerodgers 1:da79e74eadd1 108 uint16_t T0_degC_x8;
kylerodgers 1:da79e74eadd1 109 uint16_t T1_degC_x8;
gillwei7 0:030da9425166 110
kylerodgers 1:da79e74eadd1 111 int16_t H0_T0_OUT;
kylerodgers 1:da79e74eadd1 112 int16_t H1_T0_OUT;
kylerodgers 1:da79e74eadd1 113 int16_t T0_OUT;
kylerodgers 1:da79e74eadd1 114 int16_t T1_OUT;
gillwei7 0:030da9425166 115
kylerodgers 1:da79e74eadd1 116 float T0_DegC_cal;
kylerodgers 1:da79e74eadd1 117 float T1_DegC_cal;
kylerodgers 1:da79e74eadd1 118 float H0_RH_cal;
kylerodgers 1:da79e74eadd1 119 float H1_RH_cal;
kylerodgers 1:da79e74eadd1 120
kylerodgers 1:da79e74eadd1 121 };
gillwei7 0:030da9425166 122
gillwei7 0:030da9425166 123 #endif /* HTS221_H */
gillwei7 0:030da9425166 124