diff --git a/README.md b/README.md index 022c404..3f209e5 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Manufacturer | Model | Position | Temperature | Humidity | Pressure Vaisala | RS92-SGP/NGP | :heavy_check_mark: | :heavy_check_mark: | :x: | :x: Vaisala | RS41-SG/SGP/SGM | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: Graw | DFM06/09/17 | :heavy_check_mark: | :x: | :x: | :x: -Meteomodem | M10 | :heavy_check_mark: | :x: | :x: | Not Sent +Meteomodem | M10 | :heavy_check_mark: | :heavy_checkmark: | :x: | Not Sent Meteomodem | M20 | :heavy_check_mark: | :x: | :x: | Not Sent Meteo-Radiy | MP3-H1 (MRZ-H1) | :heavy_check_mark: | :x: | :x: | :x: diff --git a/RX_FSK/data/screens1.txt b/RX_FSK/data/screens1.txt index 47b9321..0844148 100644 --- a/RX_FSK/data/screens1.txt +++ b/RX_FSK/data/screens1.txt @@ -44,7 +44,7 @@ # S scan list entry info: l/empty: launch site name, #=entry nr, t=total entries, a=active entries, /: #/t # K RS41 kill timer values: Kl launch timer, Kb burst timer, Kc kill countdown # format: K_4: h:mm k_6: h:mm:ss k_s: sssss, nothing shown for other sonde -# Mx telemetry value x (t temp p preassure h hyg) [not yet implemented, maybe some day in future] +# Mx telemetry value x (t temp p preassure h hyg b battery) # Gx GPS-related data # raw data from GPS: GA, GO, GH, GC: LAtitude, lOngitude, Altutide(Height), Course over ground # relative to sonde: GD, GI, GB: Distance, dIrection (absolute), relative Bearing @@ -203,7 +203,7 @@ timeaction=#,#,# 7,0=gV 7,2=xd= 7,4=gD -7,12=gI° +7,12=gI° ############ @BatteryOLED @@ -224,3 +224,18 @@ fonts=0,1 6,0=xTemp: 6,5=bT C +############# +@Meteo +timer=-1,-1,-1 +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,# +fonts=0,1 +0,0=Is +0,9=f +1,12=t +2,0=xTelemetry Data +4,0=Mt°C +4,9=Mh%rH +6,0=MphPa +6,11=MbV diff --git a/RX_FSK/data/screens2.txt b/RX_FSK/data/screens2.txt index f4e82ea..67b3e84 100644 --- a/RX_FSK/data/screens2.txt +++ b/RX_FSK/data/screens2.txt @@ -44,7 +44,7 @@ # S scan list entry info: l/empty: launch site name, #=entry nr, t=total entries, a=active entries, /: #/t # K RS41 kill timer values: Kl launch timer, Kb burst timer, Kc kill countdown # format: K_4: h:mm k_6: h:mm:ss k_s: sssss, nothing shown for other sonde -# Mx telemetry value x (t temp p preassure h hyg) [not yet implemented, maybe some day in future] +# Mx telemetry value x (t temp p preassure h hyg b batt) # Gx GPS-related data # raw data from GPS: GA, GO, GH, GC: LAtitude, lOngitude, Altutide(Height), Course over ground # relative to sonde: GD, GI, GB: Distance, dIrection (absolute), relative Bearing @@ -571,3 +571,32 @@ color=639AFF color=FF0000,000000 12.7,0.4=Q4 12.7,18=bVV + +################# +@TelemetryData +scale=22,13 +timer=-1,-1,N +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,0 +fonts=5,6 +color=FFD700 +0,0,10.5=Is +color=0000FF +0,11,-5.5=f +1,0,4=t +1,10.5,-6=c +color=00ff00 +2,0,7=L +3,0,7=O +color=FFA500 +2,9.5,-7=a +2.8,9.5,-7=vm/s +color=AA5522 +3.6,9.5,-7=hkkm/h +color=FFFFFF +4.4,0=xTelemetry Data: +5.3,0=Mt C +5.3,9=Mh%rH +6.5,0=MphPa +6.5,11=MbV diff --git a/RX_FSK/src/Display.cpp b/RX_FSK/src/Display.cpp index 3fa56ce..eeb8a1a 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,45 @@ void Display::drawSite(DispEntry *de) { drawString(de, buf); } void Display::drawTelemetry(DispEntry *de) { + rdis->setFont(de->fmt); + float value=0; + memset(buf, ' ', 16); + switch(de->extra[0]) { + case 't': + value = sonde.si()->d.temperature; + if(!isnan(value)) { + sprintf(buf, "%5.1f", value); + strcat(buf, de->extra+1); + } + buf[5+strlen(de->extra+1)] = 0; + break; + case 'p': + value = sonde.si()->d.pressure; + if(!isnan(value)) { + if(value>=1000) sprintf(buf, "%6.1f", value); + else sprintf(buf, "%6.2f", value); + strcat(buf, de->extra+1); + } + buf[6+strlen(de->extra+1)] = 0; + break; + case 'h': + value = sonde.si()->d.relativeHumidity; + if(!isnan(value)) { + sprintf(buf, "%4.1f", value); + strcat(buf, de->extra+1); + } + buf[4+strlen(de->extra+1)] = 0; + break; + case 'b': + value = sonde.si()->d.batteryVoltage; + if(!isnan(value)) { + snprintf(buf, 5, "%4.2f", value); + strcat(buf, de->extra+1); + } + buf[5+strlen(de->extra+1)] = 0; + break; + } + drawString(de,buf); } void Display::drawKilltimer(DispEntry *de) { diff --git a/RX_FSK/src/M10M20.cpp b/RX_FSK/src/M10M20.cpp index c72d047..74b0e78 100644 --- a/RX_FSK/src/M10M20.cpp +++ b/RX_FSK/src/M10M20.cpp @@ -333,7 +333,7 @@ int M10M20::decodeframeM10(uint8_t *data) { const float Rs[3] = { 12.1e3 , 36.5e3 , 475.0e3 }; const float Rp[3] = { 1e20 , 330.0e3 , 2000.0e3 }; uint8_t sct = data[62]; - float rt = getint16(data+63) & (0xFFF); + float rt = getint16_r(data+63) & (0xFFF); float T = NAN; if(rt!=0 && sct<3) { rt = (4095-rt)/rt - (Rs[sct]/Rp[sct]); diff --git a/RX_FSK/version.h b/RX_FSK/version.h index d36b78e..20c7c65 100644 --- a/RX_FSK/version.h +++ b/RX_FSK/version.h @@ -1,4 +1,4 @@ const char *version_name = "rdzTTGOsonde"; -const char *version_id = "devel20210924b"; +const char *version_id = "devel20210924c"; const int SPIFFS_MAJOR=2; const int SPIFFS_MINOR=16;