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
316d13bc
Commit
316d13bc
authored
Dec 21, 2020
by
Eric Duminil
Browse files
Refactor co2_sensor. Smaller methods
parent
e10bc6a4
Changes
3
Hide whitespace changes
Inline
Side-by-side
ampel-firmware.ino
View file @
316d13bc
...
...
@@ -116,7 +116,7 @@ void loop() {
// Short press for night mode, Long press for calibration.
checkFlashButton
();
sensor
::
getAndSend
Data
();
sensor
::
process
Data
();
uint32_t
duration
=
millis
()
-
t0
;
if
(
duration
>
max_loop_duration
)
{
...
...
co2_sensor.cpp
View file @
316d13bc
...
...
@@ -97,6 +97,7 @@ namespace sensor {
bool
updateDataIfAvailable
()
{
if
(
scd30
.
dataAvailable
())
{
// checkTimerDeviation();
timestamp
=
ntp
::
getLocalTime
();
co2
=
scd30
.
getCO2
();
temperature
=
scd30
.
getTemperature
();
humidity
=
scd30
.
getHumidity
();
...
...
@@ -130,7 +131,36 @@ namespace sensor {
ESP
.
restart
();
}
void
getAndSendData
()
{
void
logToSerial
()
{
Serial
.
println
(
timestamp
);
Serial
.
print
(
F
(
"co2(ppm): "
));
Serial
.
print
(
co2
);
Serial
.
print
(
F
(
" temp(C): "
));
Serial
.
print
(
temperature
);
Serial
.
print
(
F
(
" humidity(%): "
));
Serial
.
println
(
humidity
);
}
void
displayCO2OnLedRing
()
{
if
(
co2
<
250
)
{
// Sensor should be calibrated.
LedEffects
::
showWaitingLED
(
color
::
magenta
);
return
;
}
/**
* Display data, even if it's "old" (with breathing).
* Those effects include a short delay.
*/
if
(
co2
<
2000
)
{
LedEffects
::
displayCO2color
(
co2
);
LedEffects
::
breathe
(
co2
);
}
else
{
// >= 2000: entire ring blinks red
LedEffects
::
redAlert
();
}
}
void
processData
()
{
bool
freshData
=
updateDataIfAvailable
();
//NOTE: Data is available, but it's sometimes erroneous: the sensor outputs zero ppm but non-zero temperature and non-zero humidity.
...
...
@@ -141,22 +171,14 @@ namespace sensor {
}
/**
* Fresh data.
Show
it and send it if needed.
* Fresh data.
Log
it and send it if needed.
*/
if
(
freshData
)
{
if
(
should_calibrate
)
{
countStableMeasurements
();
}
timestamp
=
ntp
::
getLocalTime
();
Serial
.
println
(
timestamp
);
Serial
.
print
(
F
(
"co2(ppm): "
));
Serial
.
print
(
co2
);
Serial
.
print
(
F
(
" temp(C): "
));
Serial
.
print
(
temperature
);
Serial
.
print
(
F
(
" humidity(%): "
));
Serial
.
println
(
humidity
);
logToSerial
();
csv_writer
::
logIfTimeHasCome
(
timestamp
,
co2
,
temperature
,
humidity
);
#ifdef MQTT
...
...
@@ -172,22 +194,6 @@ namespace sensor {
return
;
}
if
(
co2
<
250
)
{
// Sensor should be calibrated.
LedEffects
::
showWaitingLED
(
color
::
magenta
);
return
;
}
/**
* Display data, even if it's "old" (with breathing).
* Those effects include a short delay.
*/
if
(
co2
<
2000
)
{
LedEffects
::
displayCO2color
(
co2
);
LedEffects
::
breathe
(
co2
);
}
else
{
// >= 2000: entire ring blinks red
LedEffects
::
redAlert
();
}
displayCO2OnLedRing
();
}
}
co2_sensor.h
View file @
316d13bc
...
...
@@ -28,7 +28,7 @@ namespace sensor {
extern
String
timestamp
;
void
initialize
();
void
getAndSend
Data
();
void
process
Data
();
void
startCalibrationProcess
();
}
#endif
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