plausibility checks, eliminiate NOT_ATTACHED
This commit is contained in:
parent
90782229d5
commit
cfaccfb14a
|
|
@ -530,6 +530,8 @@ void DoDeepSleep(uint32_t sleep_time)
|
|||
// Returns true if measurements are plausible, otherwise false
|
||||
bool ReadSensors(SENSOR_data &sensor_data) {
|
||||
bool plausible;
|
||||
bool plausible_a;
|
||||
bool plausible_b;
|
||||
SENSOR_data res;
|
||||
int32_t weight_current32;
|
||||
int32_t weight_current32_a;
|
||||
|
|
@ -537,8 +539,6 @@ bool ReadSensors(SENSOR_data &sensor_data) {
|
|||
long w1_0_real;
|
||||
long w2_0_real;
|
||||
|
||||
plausible = true;
|
||||
|
||||
// vBat
|
||||
int vbat_mv = (int)(gCatena.ReadVbat() * 1000.0f);
|
||||
res.vbat = GetVBatValue(vbat_mv);
|
||||
|
|
@ -553,30 +553,14 @@ bool ReadSensors(SENSOR_data &sensor_data) {
|
|||
if (config_data.debug_level > 0) {
|
||||
gCatena.SafePrintf("LoadCell is ready.\n");
|
||||
}
|
||||
if (config_data.cal_w1_0 != NOT_ATTACHED) {
|
||||
res.weight1 = (int32_t)ReadScale('A');
|
||||
if (config_data.debug_level > 0) {
|
||||
gCatena.SafePrintf("Load_cell 1 weight1_current: %ld\n", res.weight1);
|
||||
}
|
||||
} else {
|
||||
res.weight1 = 0;
|
||||
w1_0_real = 0;
|
||||
if (config_data.debug_level > 0) {
|
||||
gCatena.SafePrintf("Load_cell 1 is disabled\n");
|
||||
}
|
||||
}
|
||||
if (config_data.cal_w2_0 != NOT_ATTACHED) {
|
||||
res.weight2 = (int32_t)ReadScale('B');
|
||||
if (config_data.debug_level > 0) {
|
||||
gCatena.SafePrintf("Load_cell 2 weight2_current: %ld\n", res.weight2);
|
||||
}
|
||||
} else {
|
||||
res.weight2 = 0;
|
||||
w2_0_real = 0;
|
||||
if (config_data.debug_level > 0) {
|
||||
gCatena.SafePrintf("Load_cell 2 is disabled\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (config_data.debug_level > 0) {
|
||||
|
|
@ -593,22 +577,31 @@ bool ReadSensors(SENSOR_data &sensor_data) {
|
|||
weight_current32 = (int32_t)((weight_current32_a + weight_current32_b) / 5.0);
|
||||
|
||||
// we check if weights are plausible
|
||||
plausible = (weight_current32_a > -10000) && (weight_current32_b > -10000) && (weight_current32_a < 150000) && (weight_current32_b < 150000);
|
||||
plausible_a = (weight_current32_a > -10000) && (weight_current32_a < 150000);
|
||||
plausible_b = (weight_current32_b > -10000) && (weight_current32_b < 150000);
|
||||
plausible = (plausible_a && plausible_b);
|
||||
|
||||
if (weight_current32 < 0) {
|
||||
if (plausible) {
|
||||
weight_current32 = 0;
|
||||
} else if (weight_current32 > UINT16_MAX) {
|
||||
}
|
||||
} else if (weight_current32 > UINT16_MAX) {
|
||||
//weight_current32 = UINT16_MAX;
|
||||
// we set the weight to 0, as such high values are not realistic and probably a sign for bad calibration...
|
||||
weight_current32 = 0;
|
||||
}
|
||||
if (config_data.cal_w1_0 == NOT_ATTACHED || config_data.cal_w2_0 == NOT_ATTACHED) {
|
||||
// when at least one load cell is disabled, we multiply the measured weight by 2
|
||||
weight_current32 = weight_current32 * 2;
|
||||
}
|
||||
res.weight = (uint16_t)weight_current32;
|
||||
}
|
||||
if (!plausible) {
|
||||
weight_current32 = NOT_PLAUSIBLE_16;
|
||||
if (!plausible_a) {
|
||||
res.weight1 = NOT_PLAUSIBLE_32;
|
||||
}
|
||||
if (!plausible_b) {
|
||||
res.weight2 = NOT_PLAUSIBLE_32;
|
||||
}
|
||||
}
|
||||
res.weight = (uint16_t)weight_current32;
|
||||
|
||||
if (fBme) {
|
||||
if (fBme) {
|
||||
/* warm up the BME280 by discarding a measurement */
|
||||
(void)gBME280.readTemperature();
|
||||
|
||||
|
|
@ -1238,15 +1231,9 @@ cCommandStream::CommandStatus cmdCalibrateScaleA(cCommandStream * pThis, void *p
|
|||
String w1_gramm(argv[1]);
|
||||
long weight1;
|
||||
|
||||
if (w1_gramm == "NA") {
|
||||
// scale a is not connected
|
||||
config_data.cal_w1_factor = 1.0;
|
||||
config_data.cal_w1_0 = NOT_ATTACHED;
|
||||
} else {
|
||||
setup_scales();
|
||||
weight1 = ReadScale('A');
|
||||
config_data.cal_w1_factor = (float)((weight1 - config_data.cal_w1_0) / w1_gramm.toFloat());
|
||||
}
|
||||
|
||||
gCatena.getFram()->saveField(cFramStorage::kAppConf, (const uint8_t *)&config_data, sizeof(config_data));
|
||||
|
||||
|
|
@ -1260,15 +1247,9 @@ cCommandStream::CommandStatus cmdCalibrateScaleB(cCommandStream * pThis, void *p
|
|||
String w2_gramm(argv[1]);
|
||||
long weight2;
|
||||
|
||||
if (w2_gramm == "NA") {
|
||||
// scale b is not connected
|
||||
config_data.cal_w2_factor = 1.0;
|
||||
config_data.cal_w2_0 = NOT_ATTACHED;
|
||||
} else {
|
||||
setup_scales();
|
||||
weight2 = ReadScale('B');
|
||||
config_data.cal_w2_factor = (float)((weight2 - config_data.cal_w2_0) / w2_gramm.toFloat());
|
||||
}
|
||||
|
||||
gCatena.getFram()->saveField(cFramStorage::kAppConf, (const uint8_t *)&config_data, sizeof(config_data));
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,8 @@ static const uint8_t LORA_DATA_VERSION = 1;
|
|||
static const uint8_t LORA_DATA_VERSION_FIRST_PACKAGE = 128;
|
||||
static const uint32_t PRESSURE_OFFSET = 825;
|
||||
static const uint16_t SEND_DIFF_THRESHOLD_5GRAMS = 20; // when weight changes by 100g, then send data
|
||||
static const long NOT_ATTACHED = -2147483648;
|
||||
static const long NOT_PLAUSIBLE_16 = 65535;
|
||||
static const long NOT_PLAUSIBLE_32 = 2147483647;
|
||||
static const byte INIT_PACKETS = 5;
|
||||
|
||||
// must be 64 bytes long (size of kAppConf)
|
||||
|
|
|
|||
Loading…
Reference in New Issue