diff --git a/mini-beieli-node.ino b/mini-beieli-node.ino index 7e99f04..7fb20ab 100644 --- a/mini-beieli-node.ino +++ b/mini-beieli-node.ino @@ -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,29 +553,13 @@ 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"); - } + res.weight1 = (int32_t)ReadScale('A'); + if (config_data.debug_level > 0) { + gCatena.SafePrintf("Load_cell 1 weight1_current: %ld\n", res.weight1); } - 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"); - } + res.weight2 = (int32_t)ReadScale('B'); + if (config_data.debug_level > 0) { + gCatena.SafePrintf("Load_cell 2 weight2_current: %ld\n", res.weight2); } } else { @@ -593,24 +577,33 @@ 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) { - weight_current32 = 0; -} 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 = 0; + } + } 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 (!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) { - /* warm up the BME280 by discarding a measurement */ - (void)gBME280.readTemperature(); + if (fBme) { + /* warm up the BME280 by discarding a measurement */ + (void)gBME280.readTemperature(); Adafruit_BME280::Measurements m = gBME280.readTemperaturePressureHumidity(); // temperature is 2 bytes from -0x80.00 to +0x7F.FF degrees C @@ -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()); - } + 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()); - } + 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)); diff --git a/mini_beieli_node.h b/mini_beieli_node.h index ce2dc98..9d0672e 100644 --- a/mini_beieli_node.h +++ b/mini_beieli_node.h @@ -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)