diff --git a/ampel-firmware/co2_sensor.cpp b/ampel-firmware/co2_sensor.cpp index f17e0f7d5f9607cd579abf2583d1644f696c9c9d..b573c4b49d2bc03d08cfafad6d78ef6277ae439a 100644 --- a/ampel-firmware/co2_sensor.cpp +++ b/ampel-firmware/co2_sensor.cpp @@ -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) {