diff --git a/data/tracker.json b/data/tracker.json index 174af42..c318f23 100644 --- a/data/tracker.json +++ b/data/tracker.json @@ -8,6 +8,27 @@ "timeout": 1, "symbol": "[", "overlay": "/", + "type": "W", + "smart_beacon": { + "active": true, + "turn_min": 25, + "slow_rate": 300, + "slow_speed": 2, + "fast_rate": 60, + "fast_speed": 5, + "min_tx_dist": 100, + "min_bcn": 5 + }, + "enhance_precision": true + }, + { + "callsign": "NOCALL-7", + "path": "WIDE1-1", + "message": "LoRa Tracker", + "timeout": 1, + "symbol": "[", + "overlay": "/", + "type": "C", "smart_beacon": { "active": true, "turn_min": 25, @@ -19,6 +40,26 @@ "min_bcn": 5 }, "enhance_precision": true + }, + { + "callsign": "NOCALL-7", + "path": "WIDE1-1", + "message": "LoRa Tracker", + "timeout": 1, + "symbol": "[", + "overlay": "/", + "type": "B", + "smart_beacon": { + "active": true, + "turn_min": 25, + "slow_rate": 300, + "slow_speed": 5, + "fast_rate": 60, + "fast_speed": 20, + "min_tx_dist": 100, + "min_bcn": 5 + }, + "enhance_precision": true } ], "button": { @@ -40,4 +81,4 @@ "end_delay": 0, "reverse": false } -} +} diff --git a/src/LoRa_APRS_Tracker.cpp b/src/LoRa_APRS_Tracker.cpp index 74bade2..f8465a7 100644 --- a/src/LoRa_APRS_Tracker.cpp +++ b/src/LoRa_APRS_Tracker.cpp @@ -206,6 +206,7 @@ void loop() { } } + String csa = ""; if (send_update && gps_loc_update) { send_update = false; @@ -289,7 +290,8 @@ void loop() { digitalWrite(Config.ptt.io_pin, Config.ptt.reverse ? LOW : HIGH); delay(Config.ptt.start_delay); } - + csa = alt + "/" + course_and_speed; + LoRa.beginPacket(); // Header: LoRa.write('<'); @@ -314,8 +316,39 @@ void loop() { } if (gps_time_update) { +// neu für lat/lng im Display + static String dlat = ""; + static String dlng = ""; + + if (gps_loc_update) { + dlat = create_lat_aprs(gps.location.rawLat()) + " " + BeaconMan.getCurrentBeaconConfig()->type; + dlng = create_long_aprs(gps.location.rawLng()); + } else { + dlat = BeaconMan.getCurrentBeaconConfig()->message; + dlng = ""; + } +// + if ((int)gps.hdop.hdop() > 5) { + csa = String("Sats: ") + gps.satellites.value() + " HDOP: " + gps.hdop.hdop(); + } else { + String alt = ""; + int alt_int = max(-99999, min(999999, (int)gps.altitude.feet())); + alt_int *= 0.3048; + if (alt_int < 0) { + alt = "-" + padding(alt_int * -1, 0) + "m "; + } else { + alt = padding(alt_int, 0) + "m "; + } + String course_and_speed = ""; + int speed_int = max(0, min(999, (int)gps.speed.knots())); + String speed = padding(speed_int * 1.852, 0) + "km/h "; + int course_int = max(0, min(360, (int)gps.course.deg())); + String course = padding(course_int, 0) + "\xF7 "; + csa = speed + course + alt + gps.satellites.value() + "/" + (int)gps.hdop.hdop(); + } + show_display(BeaconMan.getCurrentBeaconConfig()->callsign, createDateString(now()) + " " + createTimeString(now()), String(csa), String("Nxt Bcn: ") + (BeaconMan.getCurrentBeaconConfig()->smart_beacon.active ? "~" : "") + createTimeString(nextBeaconTimeStamp), BatteryIsConnected ? (String("Bat: ") + batteryVoltage + "V, " + batteryChargeCurrent + "mA") : "Powered via USB", String(dlat + " " + dlng)); - show_display(BeaconMan.getCurrentBeaconConfig()->callsign, createDateString(now()) + " " + createTimeString(now()), String("Sats: ") + gps.satellites.value() + " HDOP: " + gps.hdop.hdop(), String("Nxt Bcn: ") + (BeaconMan.getCurrentBeaconConfig()->smart_beacon.active ? "~" : "") + createTimeString(nextBeaconTimeStamp), BatteryIsConnected ? (String("Bat: ") + batteryVoltage + "V, " + batteryChargeCurrent + "mA") : "Powered via USB", String("Smart Beacon: " + getSmartBeaconState())); +// show_display(BeaconMan.getCurrentBeaconConfig()->callsign, createDateString(now()) + " " + createTimeString(now()), String("Sats: ") + gps.satellites.value() + " HDOP: " + gps.hdop.hdop(), String("Nxt Bcn: ") + (BeaconMan.getCurrentBeaconConfig()->smart_beacon.active ? "~" : "") + createTimeString(nextBeaconTimeStamp), BatteryIsConnected ? (String("Bat: ") + batteryVoltage + "V, " + batteryChargeCurrent + "mA") : "Powered via USB", String("Smart Beacon: " + getSmartBeaconState())); if (BeaconMan.getCurrentBeaconConfig()->smart_beacon.active) { // Change the Tx internal based on the current speed diff --git a/src/configuration.cpp b/src/configuration.cpp index e69d263..1bb08ca 100644 --- a/src/configuration.cpp +++ b/src/configuration.cpp @@ -51,6 +51,8 @@ Configuration ConfigurationManagement::readConfiguration() { beacon.symbol = v["symbol"].as(); if (v.containsKey("overlay")) beacon.overlay = v["overlay"].as(); + if (v.containsKey("type")) + beacon.type = v["type"].as(); beacon.smart_beacon.active = v["smart_beacon"]["active"] | false; beacon.smart_beacon.turn_min = v["smart_beacon"]["turn_min"] | 25; diff --git a/src/configuration.h b/src/configuration.h index c7dae47..08e0042 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -25,7 +25,7 @@ class Configuration { int min_bcn; }; - Beacon() : callsign("NOCALL-10"), path("WIDE1-1"), message("LoRa Tracker"), timeout(1), symbol("["), overlay("/"), enhance_precision(true) { + Beacon() : callsign("NOCALL-10"), path("WIDE1-1"), message("LoRa Tracker"), timeout(1), symbol("["), overlay("/"), type(" "), enhance_precision(true) { } String callsign; @@ -34,6 +34,7 @@ class Configuration { int timeout; String symbol; String overlay; + String type; Smart_Beacon smart_beacon; bool enhance_precision; };