Commit 73c59253 authored by Eric Duminil's avatar Eric Duminil
Browse files

Define autocalibrate for S8

parent 750b7448
...@@ -96,8 +96,6 @@ namespace sensor { ...@@ -96,8 +96,6 @@ namespace sensor {
printIntToHex(s8.sensor_id, 4); printIntToHex(s8.sensor_id, 4);
Serial.println(); Serial.println();
//TODO: Auto-calibration on/off?
// S8 has its own timer (constant 4s) // S8 has its own timer (constant 4s)
Serial.println(); Serial.println();
Serial.print(F("Setting S8 timestep to ")); Serial.print(F("Setting S8 timestep to "));
...@@ -105,14 +103,16 @@ namespace sensor { ...@@ -105,14 +103,16 @@ namespace sensor {
Serial.println(F(" s during acclimatization.")); Serial.println(F(" s during acclimatization."));
check_timestep = config::measurement_timestep_bootup; check_timestep = config::measurement_timestep_bootup;
setAutoCalibration(config::auto_calibrate_sensor);
sensor_console::defineIntCommand("co2", setCO2forDebugging, F("1500 (Sets co2 level, for debugging)")); sensor_console::defineIntCommand("co2", setCO2forDebugging, F("1500 (Sets co2 level, for debugging)"));
sensor_console::defineIntCommand("timer", setTimer, F("30 (Sets measurement interval, in s)")); sensor_console::defineIntCommand("timer", setTimer, F("30 (Sets measurement interval, in s)"));
// sensor_console::defineCommand("calibrate", startCalibrationProcess, F("(Starts calibration process)")); sensor_console::defineCommand("calibrate", startCalibrationProcess, F("(Starts calibration process)"));
// sensor_console::defineIntCommand("calibrate", calibrateSensorToSpecificPPM, sensor_console::defineIntCommand("calibrate", calibrateSensorToSpecificPPM,
// F("600 (Starts calibration process, to given ppm)")); F("600 (Starts calibration process, to given ppm)"));
// sensor_console::defineIntCommand("calibrate!", calibrateSensorRightNow, sensor_console::defineIntCommand("calibrate!", calibrateSensorRightNow,
// F("600 (Calibrates right now, to given ppm)")); F("600 (Calibrates right now, to given ppm)"));
// sensor_console::defineIntCommand("auto_calibrate", setAutoCalibration, F("0/1 (Disables/enables autocalibration)")); sensor_console::defineIntCommand("auto_calibrate", setAutoCalibration, F("0/1 (Disables/enables autocalibration)"));
} }
bool hasSensorSettled() { bool hasSensorSettled() {
...@@ -144,11 +144,26 @@ namespace sensor { ...@@ -144,11 +144,26 @@ namespace sensor {
} }
void startCalibrationProcess() { void startCalibrationProcess() {
Serial.println(F("Implement ME!")); /**
* Before applying manual calibration, S8 needs to be operated for 2 minutes with the desired measurement period in continuous mode.
*/
Serial.print(F("Setting S8 timestep to "));
Serial.print(config::timestep_during_calibration);
Serial.println(F("s, prior to calibration."));
check_timestep = config::timestep_during_calibration;
Serial.println(F("Waiting until the measurements are stable for at least 2 minutes."));
Serial.println(F("It could take a very long time."));
switchState(PREPARE_CALIBRATION_UNSTABLE);
} }
void calibrate() { void calibrate() {
Serial.println(F("Implement ME!")); Serial.print(F("Calibrating S8 now..."));
//FIXME: Apparently, only to 400ppm, though.
Serial.println(F("WARNING! FORCING CALIBRATION TO 400ppm, regardless of configuration."));
sensor_S8->manual_calibration();
Serial.println(F(" Done!"));
Serial.println(F("Sensor calibrated."));
switchState(BOOTUP); // In order to stop the calibration and select the desired timestep.
} }
void logToSerial() { void logToSerial() {
...@@ -278,7 +293,20 @@ namespace sensor { ...@@ -278,7 +293,20 @@ namespace sensor {
} }
void setAutoCalibration(int32_t autoCalibration) { void setAutoCalibration(int32_t autoCalibration) {
Serial.println(F("TODO: Implement ME!")); int16_t autoCalibrationHours = sensor_S8->get_ABC_period();
bool isAutoCalibrationOn = autoCalibrationHours > 0;
Serial.print(F("Current autocalibration : "));
Serial.print(autoCalibrationHours);
Serial.println(F(" h."));
if (isAutoCalibrationOn != autoCalibration) {
Serial.print(F("Turn autocalibration "));
Serial.print(autoCalibration ? F("on") : F("off"));
sensor_S8->set_ABC_period(autoCalibration ? 180 : 0);
delay(500);
Serial.println(F(". Done!"));
} else {
}
} }
void setTimer(int32_t timestep) { void setTimer(int32_t timestep) {
...@@ -297,6 +325,12 @@ namespace sensor { ...@@ -297,6 +325,12 @@ namespace sensor {
} }
void calibrateSensorRightNow(int32_t calibrationLevel) { void calibrateSensorRightNow(int32_t calibrationLevel) {
Serial.println(F("TODO: Implement ME!")); if (calibrationLevel >= 400 && calibrationLevel <= 2000) {
Serial.print(F("Force calibration, right now, at "));
config::co2_calibration_level = calibrationLevel;
Serial.print(config::co2_calibration_level);
Serial.println(F(" ppm."));
calibrate();
}
} }
} }
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment