Skip to content

Commit 9de2751

Browse files
committed
added imperial quantities support
Added support for imperial quanties for pressure and IMU sensor
1 parent d8e0105 commit 9de2751

File tree

4 files changed

+79
-56
lines changed

4 files changed

+79
-56
lines changed

src/EnvClass.cpp

+32-25
Original file line numberDiff line numberDiff line change
@@ -35,32 +35,34 @@ int EnvClass::begin()
3535
{
3636
_revision = board_revision();
3737
if (_revision == BOARD_REVISION_2) {
38-
if (iaqSensor == nullptr) {
38+
if (mkr_iot_carrier_rev2::iaqSensor == nullptr) {
3939
iaqSensor = new Bsec();
40+
iaqSensor->begin(BME680_I2C_ADDR_PRIMARY, Wire);
41+
if (checkIaqSensorStatus() == STATUS_ERROR){
42+
return 0;
43+
}
44+
45+
bsec_virtual_sensor_t sensorList[10] = {
46+
BSEC_OUTPUT_RAW_TEMPERATURE,
47+
BSEC_OUTPUT_RAW_PRESSURE,
48+
BSEC_OUTPUT_RAW_HUMIDITY,
49+
BSEC_OUTPUT_RAW_GAS,
50+
BSEC_OUTPUT_IAQ,
51+
BSEC_OUTPUT_STATIC_IAQ,
52+
BSEC_OUTPUT_CO2_EQUIVALENT,
53+
BSEC_OUTPUT_BREATH_VOC_EQUIVALENT,
54+
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE,
55+
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY,
56+
};
57+
58+
iaqSensor->updateSubscription(sensorList, 10, BSEC_SAMPLE_RATE_CONTINUOUS);
59+
if (checkIaqSensorStatus() == STATUS_ERROR){
60+
return 0;
61+
}
62+
mkr_iot_carrier_rev2::iaqSensor = iaqSensor;
63+
} else {
64+
iaqSensor = mkr_iot_carrier_rev2::iaqSensor;
4065
}
41-
iaqSensor->begin(BME680_I2C_ADDR_PRIMARY, Wire);
42-
if (checkIaqSensorStatus() == STATUS_ERROR){
43-
return 0;
44-
}
45-
46-
bsec_virtual_sensor_t sensorList[10] = {
47-
BSEC_OUTPUT_RAW_TEMPERATURE,
48-
BSEC_OUTPUT_RAW_PRESSURE,
49-
BSEC_OUTPUT_RAW_HUMIDITY,
50-
BSEC_OUTPUT_RAW_GAS,
51-
BSEC_OUTPUT_IAQ,
52-
BSEC_OUTPUT_STATIC_IAQ,
53-
BSEC_OUTPUT_CO2_EQUIVALENT,
54-
BSEC_OUTPUT_BREATH_VOC_EQUIVALENT,
55-
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE,
56-
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY,
57-
};
58-
59-
iaqSensor->updateSubscription(sensorList, 10, BSEC_SAMPLE_RATE_CONTINUOUS);
60-
if (checkIaqSensorStatus() == STATUS_ERROR){
61-
return 0;
62-
}
63-
6466
return 1;
6567
} else {
6668
if (HTS221 == nullptr) {
@@ -102,7 +104,12 @@ float EnvClass::readTemperature(int units /*= CELSIUS*/)
102104
{
103105
if (_revision == BOARD_REVISION_2) {
104106
while(!iaqSensor->run()){ }
105-
return iaqSensor->temperature;
107+
float reading = iaqSensor->temperature;
108+
if (units == FAHRENHEIT){
109+
return (reading * 9.0 / 5.0) + 32.0;
110+
} else {
111+
return reading;
112+
}
106113
}
107114
return HTS221->readTemperature(units);
108115
}

src/EnvClass.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ class EnvClass {
1616
float readTemperature(int units = CELSIUS);
1717
float readHumidity();
1818

19+
protected:
20+
Bsec* iaqSensor;
21+
1922
private:
2023
int checkIaqSensorStatus(void);
2124

2225
HTS221Class* HTS221;
23-
Bsec* iaqSensor;
24-
//LSM6DS3Class& LSM6DS3 = IMU;
25-
//LSM6DSOXClass& LSM6DSOX = IMU;
2626

2727
private:
2828

src/PressureClass.cpp

+39-24
Original file line numberDiff line numberDiff line change
@@ -34,30 +34,33 @@ int PressureClass::begin()
3434
{
3535
_revision = board_revision();
3636
if (_revision == BOARD_REVISION_2) {
37-
if (iaqSensor == nullptr) {
37+
if (mkr_iot_carrier_rev2::iaqSensor == nullptr) {
3838
iaqSensor = new Bsec();
39-
}
40-
iaqSensor->begin(BME680_I2C_ADDR_PRIMARY, Wire);
41-
if (checkIaqSensorStatus() == STATUS_ERROR){
42-
return 0;
43-
}
39+
iaqSensor->begin(BME680_I2C_ADDR_PRIMARY, Wire);
40+
if (checkIaqSensorStatus() == STATUS_ERROR){
41+
return 0;
42+
}
4443

45-
bsec_virtual_sensor_t sensorList[10] = {
46-
BSEC_OUTPUT_RAW_TEMPERATURE,
47-
BSEC_OUTPUT_RAW_PRESSURE,
48-
BSEC_OUTPUT_RAW_HUMIDITY,
49-
BSEC_OUTPUT_RAW_GAS,
50-
BSEC_OUTPUT_IAQ,
51-
BSEC_OUTPUT_STATIC_IAQ,
52-
BSEC_OUTPUT_CO2_EQUIVALENT,
53-
BSEC_OUTPUT_BREATH_VOC_EQUIVALENT,
54-
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE,
55-
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY,
56-
};
44+
bsec_virtual_sensor_t sensorList[10] = {
45+
BSEC_OUTPUT_RAW_TEMPERATURE,
46+
BSEC_OUTPUT_RAW_PRESSURE,
47+
BSEC_OUTPUT_RAW_HUMIDITY,
48+
BSEC_OUTPUT_RAW_GAS,
49+
BSEC_OUTPUT_IAQ,
50+
BSEC_OUTPUT_STATIC_IAQ,
51+
BSEC_OUTPUT_CO2_EQUIVALENT,
52+
BSEC_OUTPUT_BREATH_VOC_EQUIVALENT,
53+
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE,
54+
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY,
55+
};
5756

58-
iaqSensor->updateSubscription(sensorList, 10, BSEC_SAMPLE_RATE_CONTINUOUS);
59-
if (checkIaqSensorStatus() == STATUS_ERROR){
60-
return 0;
57+
iaqSensor->updateSubscription(sensorList, 10, BSEC_SAMPLE_RATE_CONTINUOUS);
58+
if (checkIaqSensorStatus() == STATUS_ERROR){
59+
return 0;
60+
}
61+
mkr_iot_carrier_rev2::iaqSensor = iaqSensor;
62+
} else {
63+
iaqSensor = mkr_iot_carrier_rev2::iaqSensor;
6164
}
6265
return 1;
6366
} else {
@@ -101,16 +104,28 @@ float PressureClass::readPressure(int units)
101104
{
102105
if (_revision == BOARD_REVISION_2) {
103106
while(!iaqSensor->run()){ }
104-
return iaqSensor->pressure/1000;
107+
float reading = iaqSensor->pressure/1000;
108+
if (units == MILLIBAR) { // 1 kPa = 10 millibar
109+
return reading * 10;
110+
} else if (units == PSI) { // 1 kPa = 0.145038 PSI
111+
return reading * 0.145038;
112+
} else {
113+
return reading;
114+
}
105115
}
106116
return LPS22HB->readPressure(units);
107117
}
108118

109-
float PressureClass::readTemperature()
119+
float PressureClass::readTemperature(int units /*= CELSIUS*/)
110120
{
111121
if (_revision == BOARD_REVISION_2) {
112122
while(!iaqSensor->run()){}
113-
return iaqSensor->temperature;
123+
float reading = iaqSensor->temperature;
124+
if (units == FAHRENHEIT){
125+
return (reading * 9.0 / 5.0) + 32.0;
126+
} else {
127+
return reading;
128+
}
114129
}
115130
return LPS22HB->readTemperature();
116131
}

src/PressureClass.h

+5-4
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,17 @@ class PressureClass {
1313
void end();
1414

1515
float readPressure(int units = KILOPASCAL);
16-
float readTemperature(void);
16+
float readTemperature(int units = CELSIUS);
17+
18+
protected:
19+
Bsec* iaqSensor;
1720

1821
private:
1922
// Helper functions declarations
2023
int checkIaqSensorStatus(void);
2124

2225
LPS22HBClass* LPS22HB;
23-
Bsec *iaqSensor;
24-
//LSM6DS3Class& LSM6DS3 = IMU;
25-
//LSM6DSOXClass& LSM6DSOX = IMU;
26+
2627

2728
private:
2829

0 commit comments

Comments
 (0)