feat: save more power by disabling timer, and use gps time for tx interval instead

This commit is contained in:
s3lph 2023-05-07 23:24:58 +02:00
parent 913ecf3f3f
commit 486715dd5f
Signed by: s3lph
GPG key ID: 0AA29A52FB33CFB5

View file

@ -606,8 +606,15 @@ void readNmeaRmc() {
} }
} }
} }
uint32_t now = millis(); if (rmc.valid || SEND_INVALID) {
if ((rmc.valid || SEND_INVALID) && ((now - lastBroadcast) / 1000 > config.interval || lastBroadcast == 0)) { uint32_t now;
now = ((rmc.time[0] - '0') * 10 + (rmc.time[1] - '0')) * 3600; // h
now += ((rmc.time[2] - '0') * 10 + (rmc.time[3] - '0')) * 60; // m
now += ((rmc.time[4] - '0') * 10 + (rmc.time[5] - '0')); // s
uint32_t interval = (((now - lastBroadcast) % 86400) + 86400) % 86400;
if (interval < config.interval) {
return;
}
lastBroadcast = now; lastBroadcast = now;
char aprs[256]; char aprs[256];
if (rmc.valid) { if (rmc.valid) {
@ -695,34 +702,6 @@ void setup() {
void loop() { void loop() {
readNmeaRmc(); readNmeaRmc();
uint32_t now = millis();
#ifdef GPSM_L80R
// L80-R: Wake up the module if config.interval has expired - wakeup happens on any serial activity
if ((now - lastBroadcast) > config.interval) {
Serial.print("\r");
Serial.flush();
}
#endif
if (abcPressed || setPressed) {
lastPressed = now;
}
if (off) {
if (abcPressed || setPressed) {
off = false;
abcPressed = false;
setPressed = false;
if (editingConfig || editingComment) {
lcd.blink();
}
lcd.backlight();
lcd.display();
}
} else {
if (now - lastPressed > 30000) {
off = true;
lcd.noDisplay();
lcd.noBacklight();
}
if (editingConfig) { if (editingConfig) {
editConfig(); editConfig();
return; return;
@ -756,6 +735,19 @@ void loop() {
} else if (page == 3) { } else if (page == 3) {
printDateTime(); printDateTime();
} }
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
if (!abcPressed && !setPressed) {
off = true;
lcd.noDisplay();
lcd.noBacklight();
} else if (off) {
off = false;
abcPressed = false;
setPressed = false;
if (editingConfig || editingComment) {
lcd.blink();
}
lcd.backlight();
lcd.display();
} }
LowPower.idle(SLEEP_FOREVER, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_ON, SPI_OFF, USART0_ON, TWI_OFF);
} }