Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
co2ampel
ampel-firmware
Commits
1435e91a
Commit
1435e91a
authored
Apr 24, 2021
by
Eric Duminil
Browse files
co2_sensor: Allow to change state by CO2 level
parent
9f3c1eb6
Pipeline
#3227
passed with stage
in 1 minute and 51 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
ampel-firmware/co2_sensor.cpp
View file @
1435e91a
...
...
@@ -183,6 +183,27 @@ namespace sensor {
current_state
=
new_state
;
}
void
switchStateForCurrentPPM
()
{
if
(
co2
==
0
)
{
// NOTE: Data is available, but it's sometimes erroneous: the sensor outputs
// zero ppm but non-zero temperature and non-zero humidity.
Serial
.
println
(
F
(
"Invalid sensor data - CO2 concentration supposedly 0 ppm"
));
switchState
(
BOOTUP
);
}
else
if
((
current_state
==
PREPARE_CALIBRATION_UNSTABLE
)
||
(
current_state
==
PREPARE_CALIBRATION_STABLE
))
{
// Check for pre-calibration states first, because we do not want to
// leave them before calibration is done.
bool
ready_for_calibration
=
countStableMeasurements
();
if
(
ready_for_calibration
)
{
calibrateAndRestart
();
}
}
else
if
(
co2
<
250
)
{
// Sensor should be calibrated.
switchState
(
NEEDS_CALIBRATION
);
}
else
{
switchState
(
READY
);
}
}
void
displayCO2OnLedRing
()
{
/**
* Display data, even if it's "old" (with breathing).
...
...
@@ -235,24 +256,7 @@ namespace sensor {
temperature
=
scd30
.
getTemperature
();
humidity
=
scd30
.
getHumidity
();
if
(
co2
==
0
)
{
// NOTE: Data is available, but it's sometimes erroneous: the sensor outputs
// zero ppm but non-zero temperature and non-zero humidity.
Serial
.
println
(
F
(
"Invalid sensor data - CO2 concentration supposedly 0 ppm"
));
switchState
(
BOOTUP
);
}
else
if
((
current_state
==
PREPARE_CALIBRATION_UNSTABLE
)
||
(
current_state
==
PREPARE_CALIBRATION_STABLE
))
{
// Check for pre-calibration states first, because we do not want to
// leave them before calibration is done.
bool
ready_for_calibration
=
countStableMeasurements
();
if
(
ready_for_calibration
)
{
calibrateAndRestart
();
}
}
else
if
(
co2
<
250
)
{
// Sensor should be calibrated.
switchState
(
NEEDS_CALIBRATION
);
}
else
{
switchState
(
READY
);
}
switchStateForCurrentPPM
();
// Log every time fresh data is available.
logToSerial
();
...
...
@@ -270,6 +274,7 @@ namespace sensor {
Serial
.
print
(
F
(
"DEBUG. Setting CO2 to "
));
co2
=
fakeCo2
;
Serial
.
println
(
co2
);
switchStateForCurrentPPM
();
}
void
setAutoCalibration
(
int32_t
autoCalibration
)
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment