@@ -29,31 +29,52 @@ AirQualityClass::~AirQualityClass()
2929{
3030}
3131
32+ /* Configure the BSEC library with information about the sensor
33+ 18v/33v = Voltage at Vdd. 1.8V or 3.3V
34+ 3s/300s = BSEC operating mode, BSEC_SAMPLE_RATE_LP or BSEC_SAMPLE_RATE_ULP
35+ 4d/28d = Operating age of the sensor in days
36+ generic_18v_3s_4d
37+ generic_18v_3s_28d
38+ generic_18v_300s_4d
39+ generic_18v_300s_28d
40+ generic_33v_3s_4d
41+ generic_33v_3s_28d
42+ generic_33v_300s_4d
43+ generic_33v_300s_28d
44+ */
45+
46+ extern " C" const uint8_t bsec_config_iaq[] = {
47+ #include " config/generic_33v_3s_4d/bsec_iaq.txt"
48+ };
49+
3250int AirQualityClass::begin ()
3351{
3452 _revision = board_revision ();
3553 if (_revision == BOARD_REVISION_2) {
3654 if (mkr_iot_carrier_rev2::iaqSensor == nullptr ) {
3755 iaqSensor = new Bsec ();
38- iaqSensor->begin (BME680_I2C_ADDR_PRIMARY , Wire);
56+ iaqSensor->begin (BME68X_I2C_ADDR_LOW , Wire);
3957 if (checkIaqSensorStatus () == STATUS_ERROR){
4058 return 0 ;
4159 }
60+ iaqSensor->setConfig (bsec_config_iaq);
4261
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,
62+ bsec_virtual_sensor_t sensorList[13 ] = {
4863 BSEC_OUTPUT_IAQ,
4964 BSEC_OUTPUT_STATIC_IAQ,
5065 BSEC_OUTPUT_CO2_EQUIVALENT,
5166 BSEC_OUTPUT_BREATH_VOC_EQUIVALENT,
67+ BSEC_OUTPUT_RAW_TEMPERATURE,
68+ BSEC_OUTPUT_RAW_PRESSURE,
69+ BSEC_OUTPUT_RAW_HUMIDITY,
70+ BSEC_OUTPUT_RAW_GAS,
71+ BSEC_OUTPUT_STABILIZATION_STATUS,
72+ BSEC_OUTPUT_RUN_IN_STATUS,
5273 BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE,
5374 BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY,
75+ BSEC_OUTPUT_GAS_PERCENTAGE
5476 };
55-
56- iaqSensor->updateSubscription (sensorList, 10 , BSEC_SAMPLE_RATE_CONTINUOUS);
77+ iaqSensor->updateSubscription (sensorList, 13 , BSEC_SAMPLE_RATE_LP);
5778 if (checkIaqSensorStatus () == STATUS_ERROR){
5879 return 0 ;
5980 }
@@ -68,14 +89,14 @@ int AirQualityClass::begin()
6889
6990int AirQualityClass::checkIaqSensorStatus (void )
7091{
71- if (iaqSensor->status != BSEC_OK) {
72- if (iaqSensor->status < BSEC_OK) {
92+ if (iaqSensor->bsecStatus != BSEC_OK) {
93+ if (iaqSensor->bsecStatus < BSEC_OK) {
7394 return STATUS_ERROR;
7495 }
7596 }
7697
77- if (iaqSensor->bme680Status != BME680_OK ) {
78- if (iaqSensor->bme680Status < BME680_OK ) {
98+ if (iaqSensor->bme68xStatus != BME68X_OK ) {
99+ if (iaqSensor->bme68xStatus < BME68X_OK ) {
79100 return STATUS_ERROR;
80101 }
81102 }
@@ -92,62 +113,63 @@ void AirQualityClass::end()
92113
93114float AirQualityClass::readVOC ()
94115{
95- float reading = 0.0 ;
96116 if (_revision == BOARD_REVISION_2) {
97- while (!iaqSensor->run ()){ }
98- reading = iaqSensor->breathVocEquivalent ;
117+ if (iaqSensor->run ()){
118+ mkr_iot_carrier_rev2::cache ();
119+ }
99120 }
100- return reading ;
121+ return mkr_iot_carrier_rev2::breathVocEquivalent ;
101122}
102123
103124float AirQualityClass::readGasResistor ()
104125{
105- float reading = 0.0 ;
106126 if (_revision == BOARD_REVISION_2) {
107- while (!iaqSensor->run ()){ }
108- reading = iaqSensor->gasResistance ;
127+ if (iaqSensor->run ()){
128+ mkr_iot_carrier_rev2::cache ();
129+ }
109130 }
110- return reading ;
131+ return mkr_iot_carrier_rev2::gasResistance ;
111132}
112133
113134float AirQualityClass::readIAQ ()
114135{
115- float reading = 0.0 ;
116136 if (_revision == BOARD_REVISION_2) {
117- while (!iaqSensor->run ()){ }
118- reading = iaqSensor->iaq ;
137+ if (iaqSensor->run ()){
138+ mkr_iot_carrier_rev2::cache ();
139+ }
119140 }
120- return reading ;
141+ return mkr_iot_carrier_rev2::iaq ;
121142}
122143
123144float AirQualityClass::readIAQAccuracy ()
124145{
125- float reading = 0.0 ;
126146 if (_revision == BOARD_REVISION_2) {
127- while (!iaqSensor->run ()){ }
128- reading = iaqSensor->iaqAccuracy ;
147+ if (iaqSensor->run ()){
148+ mkr_iot_carrier_rev2::cache ();
149+ }
129150 }
130- return reading ;
151+ return mkr_iot_carrier_rev2::iaqAccuracy ;
131152}
132153
133154float AirQualityClass::readStaticIAQ ()
134155{
135- float reading = 0.0 ;
136156 if (_revision == BOARD_REVISION_2) {
137- while (!iaqSensor->run ()){ }
138- reading = iaqSensor->staticIaq ;
157+ if (iaqSensor->run ()){
158+ mkr_iot_carrier_rev2::cache ();
159+ }
139160 }
140- return reading ;
161+ return mkr_iot_carrier_rev2::staticIaq ;
141162}
142163
143164
144165float AirQualityClass::readCO2 ()
145166{
146167 float reading = 0.0 ;
147168 if (_revision == BOARD_REVISION_2) {
148- while (!iaqSensor->run ()){ }
149- reading = iaqSensor->co2Equivalent ;
169+ if (iaqSensor->run ()){
170+ mkr_iot_carrier_rev2::cache ();
171+ }
150172 }
151- return reading ;
173+ return mkr_iot_carrier_rev2::co2Equivalent ;
152174}
153175
0 commit comments