Handle consecutive invalid value update

Set measurements type average value to invalid when invalidCounter reached max period
This commit is contained in:
samuelbles07
2024-10-21 22:37:44 +07:00
parent c3068be6e9
commit 8a87b865e6
2 changed files with 22 additions and 8 deletions

View File

@ -111,11 +111,18 @@ bool Measurements::update(MeasurementType type, int val, int ch) {
if (val == invalidValue) {
temporary->update.invalidCounter++;
// TODO: Need to check if its more than threshold, to create some indication. Maybe reference to
// max element?
if (temporary->update.invalidCounter >= temporary->update.max) {
Serial.printf("%s{%d} invalid value update counter reached (%dx)! Setting its average value "
"to invalid!",
measurementTypeStr(type), ch, temporary->update.max);
temporary->update.avg = invalidValue;
return false;
}
// Still consider updating value to valid
return true;
}
// Reset invalid counter when update new valid value
temporary->update.invalidCounter = 0;
@ -174,11 +181,18 @@ bool Measurements::update(MeasurementType type, float val, int ch) {
if (val == invalidValue) {
temporary->update.invalidCounter++;
// TODO: Need to check if its more than threshold, to create some indication. Maybe reference to
// max element?
if (temporary->update.invalidCounter >= temporary->update.max) {
Serial.printf("%s{%d} invalid value update counter reached (%dx)! Setting its average value "
"to invalid!",
measurementTypeStr(type), ch, temporary->update.max);
temporary->update.avg = invalidValue;
return false;
}
// Still consider updating value to valid
return true;
}
// Reset invalid counter when update new valid value
temporary->update.invalidCounter = 0;

View File

@ -69,7 +69,7 @@ public:
* @param val (int) the new value
* @param ch (int) the MeasurementType channel, not every MeasurementType has more than 1 channel.
* Currently maximum channel is 2. Default: 1 (channel 1)
* @return false if new value invalid consecutively reach threshold
* @return false if new value invalid consecutively reach threshold (max period)
* @return true otherwise
*/
bool update(MeasurementType type, int val, int ch = 1);
@ -83,7 +83,7 @@ public:
* @param val (float) the new value
* @param ch (int) the MeasurementType channel, not every MeasurementType has more than 1 channel.
* Currently maximum channel is 2. Default: 1 (channel 1)
* @return false if new value invalid consecutively reach threshold
* @return false if new value invalid consecutively reach threshold (max period)
* @return true otherwise
*/
bool update(MeasurementType type, float val, int ch = 1);