turn slope implementation
This commit is contained in:
parent
6ac9659a1f
commit
b0385dcbde
|
|
@ -12,9 +12,8 @@ ____________________________________________________
|
|||
- Listening to other Trackers arround.
|
||||
- Processor from 240Mhz to 80MHz to save almost 20% power consumption (from ~ 100mA to almost ~80mA) (Thanks Mane76).
|
||||
- All GPS beacons/packet are encoded for less time on RF/LoRa Tx.
|
||||
- 4th line of the OLED SCREEN shows Number of New Messages Received.
|
||||
- 4th line of the OLED SCREEN shows Altitude+Speed+Course or Number of New Messages Received.
|
||||
- 5th line of the OLED SCREEN shows Recent Heard Trackers/Station/iGates Tx.
|
||||
|
||||
____________________________________________________
|
||||
|
||||
# INSTRUCTIONS:
|
||||
|
|
@ -49,6 +48,7 @@ Timeline (Versions):
|
|||
- 2023.05.21 Adding Last-Heard LoRa Stations/Trackers
|
||||
- 2023.05.27 Adding Altitude + Speed or Course + Speed in the encoded GPS info.
|
||||
- 2023.05.29 New Config file for adding more new ideas to the Tracker.
|
||||
- 2023.06.01 Adding Turn Slope calculations for Smart Beacon
|
||||
____________________________________________________
|
||||
This code was based on the work by OE5BPA LoRa Tracker, Serge Y. Stroobandt, ON4AA in the byte-saving part of the APRS 434 firmware and Manfred DC2MH (Mane76) with the mods for multiple Callsigns and processor speed.
|
||||
- https://github.com/aprs434/lora.tracker
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -16,7 +16,7 @@
|
|||
#include "pins.h"
|
||||
#include "power_management.h"
|
||||
|
||||
#define VERSION "2023.05.31"
|
||||
#define VERSION "2023.06.01"
|
||||
|
||||
logging::Logger logger;
|
||||
|
||||
|
|
@ -767,10 +767,11 @@ void loop() {
|
|||
|
||||
static double lastTxLat = 0.0;
|
||||
static double lastTxLng = 0.0;
|
||||
static double lastTxdistance = 0.0;
|
||||
static double lastTxDistance = 0.0;
|
||||
static uint32_t txInterval = 60000L;
|
||||
static uint32_t lastTxTime = millis();
|
||||
static bool sendStandingUpdate = false;
|
||||
int currentSpeed = (int)gps.speed.kmph();
|
||||
|
||||
static bool BatteryIsConnected = false;
|
||||
static String batteryVoltage = "";
|
||||
|
|
@ -794,18 +795,24 @@ void loop() {
|
|||
if (!send_update && gps_loc_update && currentBeacon->smartBeaconState) {
|
||||
uint32_t lastTx = millis() - lastTxTime;
|
||||
currentHeading = gps.course.deg();
|
||||
lastTxdistance = TinyGPSPlus::distanceBetween(gps.location.lat(), gps.location.lng(), lastTxLat, lastTxLng);
|
||||
lastTxDistance = TinyGPSPlus::distanceBetween(gps.location.lat(), gps.location.lng(), lastTxLat, lastTxLng);
|
||||
if (lastTx >= txInterval) {
|
||||
if (lastTxdistance > currentBeacon->minTxDist) {
|
||||
if (lastTxDistance > currentBeacon->minTxDist) {
|
||||
send_update = true;
|
||||
sendStandingUpdate = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!send_update) {
|
||||
int TurnMinAngle;
|
||||
double headingDelta = abs(previousHeading - currentHeading);
|
||||
if (lastTx > currentBeacon->minDeltaBeacon * 1000) {
|
||||
if (headingDelta > currentBeacon->turnMinDeg && lastTxdistance > currentBeacon->minTxDist) {
|
||||
if (currentSpeed == 0) {
|
||||
TurnMinAngle = currentBeacon->turnMinDeg + (currentBeacon->turnSlope/(currentSpeed+1));
|
||||
} else {
|
||||
TurnMinAngle = currentBeacon->turnMinDeg + (currentBeacon->turnSlope/currentSpeed);
|
||||
}
|
||||
if (headingDelta > TurnMinAngle && lastTxDistance > currentBeacon->minTxDist) {
|
||||
send_update = true;
|
||||
sendStandingUpdate = false;
|
||||
}
|
||||
|
|
@ -817,7 +824,6 @@ void loop() {
|
|||
}
|
||||
}
|
||||
|
||||
// para cuando se tiene smartbeacon apagado
|
||||
if (!currentBeacon->smartBeaconState) {
|
||||
uint32_t lastTx = millis() - lastTxTime;
|
||||
if (lastTx >= Config.nonSmartBeaconRate*60*1000) {
|
||||
|
|
@ -914,8 +920,7 @@ void loop() {
|
|||
lastTxLat = gps.location.lat();
|
||||
lastTxLng = gps.location.lng();
|
||||
previousHeading = currentHeading;
|
||||
lastTxdistance = 0.0;
|
||||
//lastTxTime = millis();
|
||||
lastTxDistance = 0.0;
|
||||
}
|
||||
lastTxTime = millis();
|
||||
send_update = false;
|
||||
|
|
@ -1019,13 +1024,12 @@ void loop() {
|
|||
|
||||
|
||||
if (currentBeacon->smartBeaconState) {
|
||||
int curr_speed = (int)gps.speed.kmph();
|
||||
if (curr_speed < currentBeacon->slowSpeed) {
|
||||
if (currentSpeed < currentBeacon->slowSpeed) {
|
||||
txInterval = currentBeacon->slowRate * 1000;
|
||||
} else if (curr_speed > currentBeacon->fastSpeed) {
|
||||
} else if (currentSpeed > currentBeacon->fastSpeed) {
|
||||
txInterval = currentBeacon->fastRate * 1000;
|
||||
} else {
|
||||
txInterval = min(currentBeacon->slowRate, currentBeacon->fastSpeed * currentBeacon->fastRate / curr_speed) * 1000;
|
||||
txInterval = min(currentBeacon->slowRate, currentBeacon->fastSpeed * currentBeacon->fastRate / currentSpeed) * 1000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue