change LMIC_setClockError setting, periodic system reset

This commit is contained in:
Joerg Lehmann 2020-01-17 16:00:49 +01:00
parent 4c021ff34a
commit d4a67b1803
2 changed files with 18 additions and 11 deletions

View File

@ -99,6 +99,7 @@ long package_counter = 0; // sent package counter
bool send_in_progress = false; bool send_in_progress = false;
bool stop_iterations = false; bool stop_iterations = false;
bool next_package_is_init_package = true; bool next_package_is_init_package = true;
uint32_t gRebootMs;
// generic timer // generic timer
long t_cur; long t_cur;
@ -350,12 +351,11 @@ void setup_uplink(void)
gCatena.SafePrintf("%010d - setup_uplink\n", millis()); gCatena.SafePrintf("%010d - setup_uplink\n", millis());
} }
#if defined(_mcci_arduino_version) && _mcci_arduino_version >= _mcci_arduino_version_calc(2,4,0,90) && \ LMIC_setClockError(1*65536/100);
defined(CATENA_ARDUINO_PLATFORM_VERSION_CALC) && CATENA_ARDUINO_PLATFORM_VERSION >= CATENA_ARDUINO_PLATFORM_VERSION_CALC(0,17,0,10)
LMIC_setClockError(5 * 65536 / 100); /* figure out when to reboot */
#else gRebootMs = (CATCFG_T_REBOOT + os_getRndU2() - 32768) * 1000;
LMIC_setClockError(10 * 65536 / 100);
#endif
// Do an unjoin, so every reboot will trigger a join // Do an unjoin, so every reboot will trigger a join
if (config_data.debug_level > 0) { if (config_data.debug_level > 0) {
@ -576,12 +576,11 @@ void bubbleSort(long A[], int len) {
long my_read_average(byte gain, byte times) { long my_read_average(byte gain, byte times) {
long res; long res;
int const num_scale_readings = 100; //number of instantaneous scale readings to calculate the median int const num_scale_readings = 25; // number of instantaneous scale readings to calculate the median
// we use the median, not the average, see https://community.particle.io/t/boron-gpio-provides-less-current-than-electrons-gpio/46647/13 // we use the median, not the average, see https://community.particle.io/t/boron-gpio-provides-less-current-than-electrons-gpio/46647/13
long readings[num_scale_readings]; // create arry to hold readings long readings[num_scale_readings]; // create arry to hold readings
// highest and lowest value will be ignored
if (config_data.debug_level > 0) { if (config_data.debug_level > 0) {
gCatena.SafePrintf("%010d - my_read_average, measurements: ", millis()); gCatena.SafePrintf("%010d - my_read_average, measurements: ", millis());
} }
@ -594,7 +593,7 @@ long my_read_average(byte gain, byte times) {
readings[i] = LoadCell.read(); // fill the array with instantaneous readings from the scale readings[i] = LoadCell.read(); // fill the array with instantaneous readings from the scale
} }
res = median(readings, num_scale_readings); //calculate median res = median(readings, num_scale_readings); // calculate median
if (config_data.debug_level > 0) { if (config_data.debug_level > 0) {
gCatena.SafePrintf("; median of %d samples: %d\n", num_scale_readings, res); gCatena.SafePrintf("; median of %d samples: %d\n", num_scale_readings, res);
@ -646,7 +645,9 @@ void ReadSensors(SENSOR_data &sensor_data) {
if (weight_current32 < 0) { if (weight_current32 < 0) {
weight_current32 = 0; weight_current32 = 0;
} else if (weight_current32 > UINT16_MAX) { } else if (weight_current32 > UINT16_MAX) {
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;
} }
res.weight = (uint16_t)weight_current32; res.weight = (uint16_t)weight_current32;
@ -920,6 +921,11 @@ static void settleDoneCb(
// Terry ^^ // Terry ^^
} }
if (uint32_t(millis()) > gRebootMs) {
// time to reboot
NVIC_SystemReset();
}
sleepDoneCb(pSendJob); sleepDoneCb(pSendJob);
} }

View File

@ -19,6 +19,7 @@ enum {
CATCFG_T_CYCLE_TEST = 30, // every 10 seconds CATCFG_T_CYCLE_TEST = 30, // every 10 seconds
CATCFG_T_CYCLE_INITIAL = 30, // every 30 seconds initially CATCFG_T_CYCLE_INITIAL = 30, // every 30 seconds initially
CATCFG_INTERVAL_COUNT_INITIAL = 30, // repeat for 15 minutes CATCFG_INTERVAL_COUNT_INITIAL = 30, // repeat for 15 minutes
CATCFG_T_REBOOT = 30 * 24 * 60 * 60, // reboot every 30 days
}; };
/* additional timing parameters; ususually you don't change these. */ /* additional timing parameters; ususually you don't change these. */
@ -55,7 +56,7 @@ enum {
| |
\****************************************************************************/ \****************************************************************************/
static const int32_t fwVersion = 20200113; static const int32_t fwVersion = 20200116;
static const byte INIT_PACKAGE_INTERVAL = 100; // send an init package every 100 packages; static const byte INIT_PACKAGE_INTERVAL = 100; // send an init package every 100 packages;
static const byte MAX_VALUES_TO_SEND = 8; static const byte MAX_VALUES_TO_SEND = 8;