From 5be57a02b5d784de943bf6ef3eeff0bb2982136b Mon Sep 17 00:00:00 2001 From: eben80 Date: Fri, 24 Sep 2021 14:55:53 +0200 Subject: [PATCH] Make telemetry values available on device display This is probably not the cleanest coding so apologies in advance. Tested on TTGO. --- RX_FSK/src/Display.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/RX_FSK/src/Display.cpp b/RX_FSK/src/Display.cpp index 3fa56ce..0272678 100644 --- a/RX_FSK/src/Display.cpp +++ b/RX_FSK/src/Display.cpp @@ -809,6 +809,10 @@ void Display::parseDispElement(char *text, DispEntry *de) de->extra = strdup(text+1); //Serial.printf("parsing 'f' entry: extra is '%s'\n", de->extra); break; + case 'm': + de->func = disp.drawTelemetry; + de->extra = strdup(text+1); + break; case 'n': // IP address / small always uses tiny font on TFT for backward compatibility // Large font can be used arbitrarily @@ -1283,6 +1287,31 @@ void Display::drawSite(DispEntry *de) { drawString(de, buf); } void Display::drawTelemetry(DispEntry *de) { + rdis->setFont(de->fmt); + float value=0; + switch(de->extra[0]) { + case 't': + value = sonde.si()->d.temperature; + if(value!=0xffff) snprintf(buf, 8, "%3.2f", value); + else strcpy(buf, " "); + break; + case 'p': + value = sonde.si()->d.pressure; + if(value!=0xffff) snprintf(buf, 7, "%4.2f", value); + else strcpy(buf, " "); + break; + case 'h': + value = sonde.si()->d.relativeHumidity; + if(value!=0xffff) snprintf(buf, 5, "%3.1f", value); + else strcpy(buf, " "); + break; + case 'b': + value = sonde.si()->d.batteryVoltage; + if(value!=0xffff) snprintf(buf, 5, "%1.2f", value); + else strcpy(buf, " "); + break; + } + drawString(de,buf); } void Display::drawKilltimer(DispEntry *de) {