@@ -23,8 +23,8 @@ constexpr uint32_t TX_INTERVAL = 140;
2323
2424constexpr unsigned int BAUDRATE = 115200 ;
2525
26- constexpr uint32_t magic_constant = 0x5157 ;
27- uint32_t pauseBatt = 345 ; // centiVolt
26+ constexpr uint32_t magic_constant = 0x5117 ;
27+ uint32_t pauseBatt = 340 ; // centiVolt
2828
2929class EEPromStore : public StoringAbtract {
3030private:
@@ -86,6 +86,8 @@ void saveState() {
8686 digitalWrite (LED2, HIGH);
8787}
8888
89+ uint nbPacketSent = 0 ;
90+
8991void onEvent (EventType ev) {
9092 switch (ev) {
9193 case EventType::JOINING:
@@ -114,6 +116,10 @@ void onEvent(EventType ev) {
114116 }
115117 }
116118 }
119+ nbPacketSent++;
120+ if (nbPacketSent % 32 == 0 ) {
121+ saveState ();
122+ }
117123 break ;
118124 default :
119125 PRINT_DEBUG (2 , F (" Other" ));
@@ -159,6 +165,7 @@ void emptyGpsBuffer() {
159165
160166int32_t old_latitude = 0 ;
161167int32_t old_longitude = 0 ;
168+ int32_t nb_ignored = 0 ;
162169
163170void do_send (OsDeltaTime to_wait) {
164171 if (LMIC.getTxRxFlags ().test (TxRxStatus::NEED_BATTERY_LEVEL)) {
@@ -193,10 +200,16 @@ void do_send(OsDeltaTime to_wait) {
193200 if (std::abs (latitude - old_latitude) < 1000 &&
194201 std::abs (longitude - old_longitude) < 1000 ) {
195202 PRINT_DEBUG (1 , F (" GPS position not changed" ));
196- nextSendEpoch = rtc.getEpoch () + TX_INTERVAL;
197- return ;
203+ nb_ignored++;
204+ if (nb_ignored < 10 ) {
205+ PRINT_DEBUG (1 , F (" GPS position not changed skip" ));
206+ nextSendEpoch = rtc.getEpoch () + TX_INTERVAL;
207+ return ;
208+ }
198209 }
199210
211+ nb_ignored = 0 ;
212+
200213 old_latitude = latitude;
201214 old_longitude = longitude;
202215 constexpr int64_t coorfactor = 10000000 ;
@@ -306,6 +319,7 @@ void setup() {
306319 LMIC.loadStateWithoutTimeData (store);
307320 digitalWrite (LED2, HIGH);
308321 LMIC.setDrTx (5 );
322+ LMIC.clrTxData ();
309323 }
310324
311325 // first send
@@ -315,6 +329,7 @@ void setup() {
315329 PRINT_DEBUG (1 , F (" Starting ." ));
316330 delay (1000 );
317331 }
332+
318333}
319334
320335void goToSleep (uint32_t nb_sec_to_sleep) {
@@ -356,7 +371,6 @@ void sleep_if_battery_too_low() {
356371}
357372
358373void loop () {
359-
360374 sleep_if_battery_too_low ();
361375
362376 OsDeltaTime to_wait = LMIC.run ();
@@ -373,6 +387,7 @@ void loop() {
373387 }
374388
375389 if (LMIC.getOpMode ().test (OpState::TXDATA)) {
390+ PRINT_DEBUG (1 , F (" Refresh data ." ));
376391 // refresh data
377392 do_send (to_wait);
378393 return ;
0 commit comments