diff --git a/firmware/inc/data.h b/firmware/inc/data.h index e65fe1c..d69e7af 100644 --- a/firmware/inc/data.h +++ b/firmware/inc/data.h @@ -31,7 +31,7 @@ /** * Structure for all the information in each datapoint. * - * Size is approx 40 bytes + * Size is approx 52 bytes */ typedef struct tracker_datapoint { /* Time */ @@ -46,7 +46,10 @@ typedef struct tracker_datapoint { /* Sensors */ float battery; /* Volts */ float solar; /* Volts */ - float temperature; /* ºC */ + float main_pressure; /* Pa */ + float thermistor_temperature; /* ºC */ + float bmp180_temperature; /* ºC */ + float radio_die_temperature; /* ºC */ uint32_t xosc_error; /* Hertz */ } tracker_datapoint; diff --git a/firmware/src/aprs.c b/firmware/src/aprs.c index e5d7829..1ce666f 100644 --- a/firmware/src/aprs.c +++ b/firmware/src/aprs.c @@ -99,7 +99,7 @@ void encode_telemetry(char* str, tracker_datapoint* dp) { base91_encode(str+0, 2, (dp->battery * 1000)); /* Battery never > 8V */ base91_encode(str+2, 2, (dp->solar * 1000)); /* Solar never > 8V */ - base91_encode(str+4, 2, ((dp->temperature+273.2)*10)); /* Temp never > 526º! */ + base91_encode(str+4, 2, ((dp->radio_die_temperature+273.2)*10)); /* Temp never > 526º! */ base91_encode(str+6, 2, dp->satillite_count); /* Small! */ } diff --git a/firmware/src/data.c b/firmware/src/data.c index 4c295bd..4bba777 100644 --- a/firmware/src/data.c +++ b/firmware/src/data.c @@ -66,7 +66,7 @@ struct tracker_datapoint* collect_data(void) */ datapoint.battery = get_battery(); /* Will return zero by default */ datapoint.solar = get_solar(); /* Will return zero by default */ - datapoint.temperature = telemetry_si_temperature(); + datapoint.radio_die_temperature = telemetry_si_temperature(); /** * ---- GPS ---- diff --git a/firmware/src/main.c b/firmware/src/main.c index 48a99a3..36e8a71 100644 --- a/firmware/src/main.c +++ b/firmware/src/main.c @@ -58,22 +58,24 @@ uint16_t format_telemetry_string(char* string, struct tracker_datapoint* dp, uint32_t altitude = 0; uint16_t len; - lat_fmt = (double)dp->latitude / 10000000.0; /* degrees */ - lon_fmt = (double)dp->longitude / 10000000.0; /* degrees */ - altitude = dp->altitude / 1000; /* meters */ + lat_fmt = (double)dp->latitude / 10000000.0; /* hundred nanodeg -> degrees */ + lon_fmt = (double)dp->longitude / 10000000.0; /* hundred nanodeg -> degrees */ + altitude = dp->altitude / 1000; /* mm -> meters */ /* sprintf - preamble */ memset(string, '$', dollars); len = dollars; - /* sprintf - full string */ + /* sprintf - full string (approx 80 chars) */ len += sprintf(telemetry_string + len, - "%s,%02u:%02u:%02u,%02u%02u%02u,%02.5f,%03.5f,%ld,%u,%.2f,%.2f,%.1f,%ld", + "%s,%02u:%02u:%02u,%02u%02u%02u,%02.5f,%03.5f,%ld,%u,%.2f,%.0f,%.1f,%.1f,%.1f,%ld", CALLSIGN, dp->time.hour, dp->time.minute, dp->time.second, dp->time.year%100, dp->time.month, dp->time.day, lat_fmt, lon_fmt, altitude, dp->satillite_count, - dp->battery, dp->solar, dp->temperature, dp->xosc_error); + dp->solar, dp->main_pressure, + dp->thermistor_temperature, dp->bmp180_temperature, + dp->radio_die_temperature, dp->xosc_error); if (reduce_char_set) { /* Reduce character set */ @@ -85,8 +87,8 @@ uint16_t format_telemetry_string(char* string, struct tracker_datapoint* dp, "*%04X\r", crc_checksum(telemetry_string + dollars)); - /* Length should be no more than 100 characters!! */ - if (len <= 100) { + /* Length should be no more than 120 characters!! */ + if (len <= 120) { return len; }