Skip to content

Commit b92e561

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

File tree

4 files changed

+81
-60
lines changed

4 files changed

+81
-60
lines changed

src/EnvClass.cpp

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
This file is part of the Arduino_LSM6DSOX library.
2+
This file is part of the Arduino_MKRIoTCarrier library.
33
Copyright (c) 2021 Arduino SA. All rights reserved.
44
55
This library is free software; you can redistribute it and/or
@@ -23,7 +23,6 @@
2323
// sets function called on slave write
2424
EnvClass::EnvClass( getRev_t getRevision )
2525
{
26-
//If board_revision = 1, IMU module is LSM6DSOX, otherwise is LSM6DS3
2726
board_revision = getRevision;
2827
}
2928

@@ -35,32 +34,34 @@ int EnvClass::begin()
3534
{
3635
_revision = board_revision();
3736
if (_revision == BOARD_REVISION_2) {
38-
if (iaqSensor == nullptr) {
37+
if (mkr_iot_carrier_rev2::iaqSensor == nullptr) {
3938
iaqSensor = new Bsec();
39+
iaqSensor->begin(BME680_I2C_ADDR_PRIMARY, Wire);
40+
if (checkIaqSensorStatus() == STATUS_ERROR){
41+
return 0;
42+
}
43+
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+
};
56+
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;
4064
}
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-
6465
return 1;
6566
} else {
6667
if (HTS221 == nullptr) {
@@ -102,7 +103,12 @@ float EnvClass::readTemperature(int units /*= CELSIUS*/)
102103
{
103104
if (_revision == BOARD_REVISION_2) {
104105
while(!iaqSensor->run()){ }
105-
return iaqSensor->temperature;
106+
float reading = iaqSensor->temperature;
107+
if (units == FAHRENHEIT){
108+
return (reading * 9.0 / 5.0) + 32.0;
109+
} else {
110+
return reading;
111+
}
106112
}
107113
return HTS221->readTemperature(units);
108114
}

src/EnvClass.h

Lines changed: 3 additions & 3 deletions
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

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
This file is part of the Arduino_LSM6DSOX library.
2+
This file is part of the Arduino_MKRIoTCarrier library.
33
Copyright (c) 2021 Arduino SA. All rights reserved.
44
55
This library is free software; you can redistribute it and/or
@@ -22,7 +22,6 @@
2222
// sets function called on slave write
2323
PressureClass::PressureClass( getRev_t getRevision)
2424
{
25-
//If board_revision = 1, IMU module is LSM6DSOX, otherwise is LSM6DS3
2625
board_revision = getRevision;
2726
}
2827

@@ -34,30 +33,33 @@ int PressureClass::begin()
3433
{
3534
_revision = board_revision();
3635
if (_revision == BOARD_REVISION_2) {
37-
if (iaqSensor == nullptr) {
36+
if (mkr_iot_carrier_rev2::iaqSensor == nullptr) {
3837
iaqSensor = new Bsec();
39-
}
40-
iaqSensor->begin(BME680_I2C_ADDR_PRIMARY, Wire);
41-
if (checkIaqSensorStatus() == STATUS_ERROR){
42-
return 0;
43-
}
38+
iaqSensor->begin(BME680_I2C_ADDR_PRIMARY, Wire);
39+
if (checkIaqSensorStatus() == STATUS_ERROR){
40+
return 0;
41+
}
4442

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-
};
43+
bsec_virtual_sensor_t sensorList[10] = {
44+
BSEC_OUTPUT_RAW_TEMPERATURE,
45+
BSEC_OUTPUT_RAW_PRESSURE,
46+
BSEC_OUTPUT_RAW_HUMIDITY,
47+
BSEC_OUTPUT_RAW_GAS,
48+
BSEC_OUTPUT_IAQ,
49+
BSEC_OUTPUT_STATIC_IAQ,
50+
BSEC_OUTPUT_CO2_EQUIVALENT,
51+
BSEC_OUTPUT_BREATH_VOC_EQUIVALENT,
52+
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE,
53+
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY,
54+
};
5755

58-
iaqSensor->updateSubscription(sensorList, 10, BSEC_SAMPLE_RATE_CONTINUOUS);
59-
if (checkIaqSensorStatus() == STATUS_ERROR){
60-
return 0;
56+
iaqSensor->updateSubscription(sensorList, 10, BSEC_SAMPLE_RATE_CONTINUOUS);
57+
if (checkIaqSensorStatus() == STATUS_ERROR){
58+
return 0;
59+
}
60+
mkr_iot_carrier_rev2::iaqSensor = iaqSensor;
61+
} else {
62+
iaqSensor = mkr_iot_carrier_rev2::iaqSensor;
6163
}
6264
return 1;
6365
} else {
@@ -101,16 +103,28 @@ float PressureClass::readPressure(int units)
101103
{
102104
if (_revision == BOARD_REVISION_2) {
103105
while(!iaqSensor->run()){ }
104-
return iaqSensor->pressure/1000;
106+
float reading = iaqSensor->pressure/1000;
107+
if (units == MILLIBAR) { // 1 kPa = 10 millibar
108+
return reading * 10;
109+
} else if (units == PSI) { // 1 kPa = 0.145038 PSI
110+
return reading * 0.145038;
111+
} else {
112+
return reading;
113+
}
105114
}
106115
return LPS22HB->readPressure(units);
107116
}
108117

109-
float PressureClass::readTemperature()
118+
float PressureClass::readTemperature(int units /*= CELSIUS*/)
110119
{
111120
if (_revision == BOARD_REVISION_2) {
112121
while(!iaqSensor->run()){}
113-
return iaqSensor->temperature;
122+
float reading = iaqSensor->temperature;
123+
if (units == FAHRENHEIT){
124+
return (reading * 9.0 / 5.0) + 32.0;
125+
} else {
126+
return reading;
127+
}
114128
}
115129
return LPS22HB->readTemperature();
116130
}

src/PressureClass.h

Lines changed: 5 additions & 4 deletions
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)