Changed hts221 into Class.
Dependents: WeatherSensor-Joe PAG-CourseWork-NicksEdits SOFT253_Assignment SOFT253_Assignment_V2 ... more
Fork of hts221 by
Diff: hts221.cpp
- Revision:
- 1:da79e74eadd1
- Parent:
- 0:030da9425166
- Child:
- 2:6d7166d49741
--- a/hts221.cpp Fri Jan 30 08:49:01 2015 +0000 +++ b/hts221.cpp Fri Jul 24 15:21:28 2015 +0000 @@ -16,71 +16,50 @@ #include <mbed.h> #include "hts221.h" -I2C i2c(p22, p20); //SDA, SCL - - -/*lint ++flb "Enter library region" */ - -// Gill - - -// - -static const char expected_who_am_i = 0xBCU; //!< Expected value to get from WHO_AM_I register. +HTS221::HTS221 (PinName sda, PinName scl) : _i2c(sda, scl) +{ + init(); + calib(); +} -uint8_t H0_rH_x2; -uint8_t H1_rH_x2; -uint16_t T0_degC_x8; -uint16_t T1_degC_x8; - -int16_t H0_T0_OUT; -int16_t H1_T0_OUT; -int16_t T0_OUT; -int16_t T1_OUT; - -float T0_DegC_cal; -float T1_DegC_cal; -float H0_RH_cal; -float H1_RH_cal; - -bool hts221_init(void) +bool HTS221::init(void) { bool transfer_succeeded = true; - i2c.frequency(400000); - hts221_register_write(0x10 , TRes_4 << 3 | HRes_5); - hts221_register_write(0x20 , PD_On | BDU_On | ODR_1Hz); // Control register 1 - hts221_register_write(0x21 , NoBoot | HeaterOff | No_OS); // Control register 2 - hts221_register_write(0x22 , DRDY_H | PP_OD_PP | DRDY_NON); // Control register 3 + _i2c.frequency(400000); + register_write(0x10 , TRes_4 << 3 | HRes_5); + register_write(0x20 , PD_On | BDU_On | ODR_1Hz); // Control register 1 + register_write(0x21 , NoBoot | HeaterOff | No_OS); // Control register 2 + register_write(0x22 , DRDY_H | PP_OD_PP | DRDY_NON); // Control register 3 // Read and verify product ID - transfer_succeeded &= hts221_verify_product_id(); + transfer_succeeded &= verify_product_id(); return transfer_succeeded; } -bool hts221_verify_product_id(void) +bool HTS221::verify_product_id(void) { char who_am_i[1]; - hts221_register_read(ADDRESS_WHO_AM_I, &who_am_i[0], 1); + register_read(ADDRESS_WHO_AM_I, &who_am_i[0], 1); if (who_am_i[0] != expected_who_am_i) return false; else return true; } -void hts221_register_write(uint8_t register_address, uint8_t value) +void HTS221::register_write(uint8_t register_address, uint8_t value) { char w2_data[2]; w2_data[0] = register_address; w2_data[1] = value; - i2c.write(HTS221_WriteADDE, w2_data, 2); + _i2c.write(HTS221_WriteADDE, w2_data, 2); } -void hts221_register_read(char register_address, char *destination, uint8_t number_of_bytes) +void HTS221::register_read(char register_address, char *destination, uint8_t number_of_bytes) { - i2c.write(HTS221_WriteADDE, ®ister_address, 1, 1); - i2c.read(HTS221_WriteADDE, destination, number_of_bytes); //Note by Tsungta, API may have a bug + _i2c.write(HTS221_WriteADDE, ®ister_address, 1, 1); + _i2c.read(HTS221_WriteADDE, destination, number_of_bytes); //Note by Tsungta, API may have a bug //runaboud read function added by Tsungta /* if (number_of_bytes == 1) { @@ -98,11 +77,11 @@ }*/ } -void HTS221_Calib(void) +void HTS221::calib(void) { char cal_data[16]; - hts221_register_read(0xB0, cal_data, 16); + register_read(0xB0, cal_data, 16); H0_rH_x2 = cal_data[0]; H1_rH_x2 = cal_data[1]; @@ -127,13 +106,13 @@ } -void HTS221_ReadTempHumi( float *pTemp , float *pHumi) +void HTS221::ReadTempHumi( float *pTemp , float *pHumi) { char sensor_data[4]; int16_t H_OUT; int16_t T_OUT; - hts221_register_read(0xA8, sensor_data, 4); + register_read(0xA8, sensor_data, 4); H_OUT = (sensor_data[1] << 8) + sensor_data[0]; T_OUT = (sensor_data[3] << 8) + sensor_data[2]; @@ -151,13 +130,10 @@ if ((int)*pHumi<MinTemp ) *pHumi = MinTemp ; } -float linear_interpolation(int16_t x0, float y0, int16_t x1, float y1, float mes) +float HTS221::linear_interpolation(int16_t x0, float y0, int16_t x1, float y1, float mes) { float a = (float) ((y1 - y0) / (x1 - x0)); float b = (float) -a*x0 + y0; float cal = (float) a * mes + b; return cal; -} - -/*lint --flb "Leave library region" */ - +} \ No newline at end of file