Compare commits

...
4 Commits
Author SHA1 Message Date
jlehmann 22982235fb do not send on first position 2020-06-08 20:40:57 +02:00
jlehmann 23de8b8f4b use SF12 for initial Join 2020-06-08 16:06:52 +02:00
jlehmann f0b4b0d286 add delay after wakeup of deep sleep; add command calibrate_scales 2020-06-08 14:29:34 +02:00
jlehmann 3a8764dcb4 avoid recursion 2020-06-06 19:34:47 +02:00
3 changed files with 34 additions and 7 deletions
+2 -2
View File
@@ -31,7 +31,7 @@ Das sind die verwendeten Libraries [1]:
| https://github.com/mcci-catena/SHT1x.git | be7042c | Tue, 20 Sep 2011 13:56:23 +1000 |
Patch arduino-lmic, so initial SF10 is used initially:
Patch arduino-lmic, so initial SF12 is used initially:
`
[joerg@cinnamon src]$ git diff
@@ -44,7 +44,7 @@ index efff7d5..74efb37 100644
#define LMICbandplan_isFSK() (/* RX datarate */LMIC.dndr == EU868_DR_FSK)
-#define LMICbandplan_getInitialDrJoin() (EU868_DR_SF7)
+#define LMICbandplan_getInitialDrJoin() (EU868_DR_SF10)
+#define LMICbandplan_getInitialDrJoin() (EU868_DR_SF12)
void LMICeu868_setBcnRxParams(void);
#define LMICbandplan_setBcnRxParams() LMICeu868_setBcnRxParams()
+31 -4
View File
@@ -60,6 +60,7 @@ cCommandStream::CommandFn cmdGetScaleA;
cCommandStream::CommandFn cmdGetScaleB;
cCommandStream::CommandFn cmdCalibrateZeroScaleA;
cCommandStream::CommandFn cmdCalibrateZeroScaleB;
cCommandStream::CommandFn cmdCalibrateScales;
cCommandStream::CommandFn cmdCalibrateScaleA;
cCommandStream::CommandFn cmdCalibrateScaleB;
cCommandStream::CommandFn cmdSetDebugLevel;
@@ -72,6 +73,7 @@ static const cCommandStream::cEntry sMyExtraCommmands[] =
{ "hello", cmdHello },
{ "get_calibration_settings", cmdGetCalibrationSettings },
{ "get_sensor_readings", cmdGetSensorReadings },
{ "calibrate_scales", cmdCalibrateScales },
{ "calibrate_zero_scale_a", cmdCalibrateZeroScaleA },
{ "calibrate_zero_scale_b", cmdCalibrateZeroScaleB },
{ "calibrate_scale_a", cmdCalibrateScaleA },
@@ -110,6 +112,7 @@ long iteration = 0; // what iteration number do we have, starts with 0
long package_counter = 0; // sent package counter
bool send_in_progress = false;
bool stop_iterations = false;
bool start_new_iteration = false;
bool next_package_is_init_package = true;
uint32_t gRebootMs;
@@ -374,6 +377,9 @@ void setup_uplink(void)
void loop()
{
gCatena.poll();
if (start_new_iteration) {
StartNewIteration();
}
}
void ClearLoraData(void)
@@ -616,6 +622,7 @@ void ReadSensors(SENSOR_data &sensor_data) {
}
void StartNewIteration() {
start_new_iteration = false;
uint32_t wait_time;
wait_time = 0;
@@ -672,7 +679,7 @@ void StartNewIteration() {
// we send data the first time the system is started, when the array is full
// or when the weight has fallen more than threshold or the first measurement is
// more than one hour old (which should not happen :-) )
if ( (next_package_is_init_package) || (my_position >= MAX_VALUES_TO_SEND) || (abs(last_sensor_reading.weight - current_sensor_reading.weight) > SEND_DIFF_THRESHOLD_5GRAMS) || ((millis() - timer_pos0) > 3600000)) {
if ( (next_package_is_init_package) || (my_position >= MAX_VALUES_TO_SEND) || ((my_position > 1) && (abs(last_sensor_reading.weight - current_sensor_reading.weight) > SEND_DIFF_THRESHOLD_5GRAMS)) || ((millis() - timer_pos0) > 3600000)) {
lora_data.offset_last_reading = (uint8_t)((millis() - timer_pos0) / 1000 / 60);
if (config_data.debug_level > 0) {
gCatena.SafePrintf("startSendingUplink(), my_position: %d, iteration: %d, package_counter: %d\n", my_position, iteration, package_counter);
@@ -767,7 +774,7 @@ void StartNewIteration() {
if (!fUsbPower) {
DoDeepSleep(sleep_time_sec);
if (! stop_iterations) {
StartNewIteration();
start_new_iteration = true;
}
}
@@ -965,6 +972,8 @@ void deepSleepRecovery(void)
SPI.begin();
if (fFlash)
gSPI2.begin();
// we wait 100 milliseconds after wakeup...
delay(100);
}
@@ -975,7 +984,7 @@ static void startNewIterationCb(osjob_t* pJob)
}
if (! stop_iterations) {
StartNewIteration();
start_new_iteration = true;
}
}
@@ -1108,7 +1117,6 @@ cCommandStream::CommandStatus cmdHello(cCommandStream * pThis, void *pContext, i
return cCommandStream::CommandStatus::kSuccess;
}
cCommandStream::CommandStatus cmdGetCalibrationSettings(cCommandStream * pThis, void *pContext, int argc, char **argv)
{
pThis->printf("{\n");
@@ -1173,6 +1181,25 @@ cCommandStream::CommandStatus cmdCalibrateZeroScaleB(cCommandStream * pThis, voi
return cCommandStream::CommandStatus::kSuccess;
}
cCommandStream::CommandStatus cmdCalibrateScales(cCommandStream * pThis, void *pContext, int argc, char **argv)
{
String s_cal_w1_0(argv[1]);
String s_cal_w1_factor(argv[2]);
String s_cal_w2_0(argv[3]);
String s_cal_w2_factor(argv[4]);
config_data.cal_w1_0 = s_cal_w1_0.toInt();
config_data.cal_w1_factor = s_cal_w1_factor.toFloat();
config_data.cal_w2_0 = s_cal_w2_0.toInt();
config_data.cal_w2_factor = s_cal_w2_factor.toFloat();
gCatena.getFram()->saveField(cFramStorage::kAppConf, (const uint8_t *)&config_data, sizeof(config_data));
pThis->printf("{ \"msg\": \"calibrate_scales was successful\" }\n");
return cCommandStream::CommandStatus::kSuccess;
}
cCommandStream::CommandStatus cmdCalibrateScaleA(cCommandStream * pThis, void *pContext, int argc, char **argv)
{
String w1_gramm(argv[1]);
+1 -1
View File
@@ -56,7 +56,7 @@ enum {
|
\****************************************************************************/
static const int32_t fwVersion = 20200605;
static const int32_t fwVersion = 20200608;
static const byte INIT_PACKAGE_INTERVAL = 100; // send an init package every 100 packages;
static const byte MAX_VALUES_TO_SEND = 8;