2022.02.20.01

FEATURE_SATELLITE_TRACKING: Updated P13 library to have observer.update_location function.  Controller code now uses update_location rather than instantiating new Observer objects
        Updated hardcoded AO17TEST TLE
This commit is contained in:
k3ng 2022-02-20 19:29:11 -05:00
parent 921280ca2b
commit 51bf7686e4
9 changed files with 824 additions and 1075 deletions

File diff suppressed because it is too large Load Diff

View File

@ -116,8 +116,8 @@
#define ROTATING_DOWN 4
#define REMOTE_UNIT_NO_COMMAND 0
#define REMOTE_UNIT_AZ_COMMAND 1
#define REMOTE_UNIT_EL_COMMAND 2
// #define REMOTE_UNIT_AZ_COMMAND 1
// #define REMOTE_UNIT_EL_COMMAND 2
#define REMOTE_UNIT_OTHER_COMMAND 3
#define REMOTE_UNIT_AW_COMMAND 4
#define REMOTE_UNIT_DHL_COMMAND 5
@ -132,7 +132,7 @@
#define REMOTE_UNIT_RA_COMMAND 14
#define REMOTE_UNIT_RE_COMMAND 15
#define REMOTE_UNIT_RS_COMMAND 16
#define REMOTE_UNIT_PG_COMMAND 17
#define REMOTE_UNIT_PM_COMMAND 17
#define NOT_PARKED 0
#define PARK_INITIATED 1
@ -334,6 +334,7 @@
#define NEXTION_TRANSIENT_MESSAGE_REQUESTED 1
#define NEXTION_TRANSIENT_MESSAGE_IN_PROGRESS 2
#define MASTER_REMOTE_LINK_DOWN 0
#define MASTER_REMOTE_LINK_UP 1
/* ------end of macros ------- */

View File

@ -80,4 +80,4 @@
// #define DEBUG_SATELLITE_POPULATE_LIST_ARRAY
// #define DEBUG_SATELLITE_LIST_EXTRA_INFO
// #define DEBUG_SATELLITE_CALC_RESET
// #define DEBUG_SATELLITE_USE_OLD_OBSERVER_OBJECT
// #define DEBUG_SATELLITE_USE_OLD_OBSERVER_OBJECT // Deprecated 2022-02-20

View File

@ -7,7 +7,7 @@
/* main features */
#define FEATURE_ELEVATION_CONTROL // uncomment this for AZ/EL rotators
// #define FEATURE_YAESU_EMULATION // uncomment this for Yaesu GS-232 emulation on control port
#define FEATURE_YAESU_EMULATION // uncomment this for Yaesu GS-232 emulation on control port
// #define FEATURE_EASYCOM_EMULATION // Easycom protocol emulation on control port
// #define FEATURE_DCU_1_EMULATION // DCU-1 protocol emulation on control port (only supports azimuth only systems)
@ -23,7 +23,7 @@
// #define FEATURE_TEST_DISPLAY_AT_STARTUP
// #define FEATURE_CALIBRATION // under development - this will get rid of azimuth and elevation offsets and replace with runtime calibration tables
// #define FEATURE_SATELLITE_TRACKING // https://github.com/k3ng/k3ng_rotator_controller/wiki/707-Satellite-Tracking
#define FEATURE_SATELLITE_TRACKING // https://github.com/k3ng/k3ng_rotator_controller/wiki/707-Satellite-Tracking
#define LANGUAGE_ENGLISH // all languages customized in rotator_language.h
// #define LANGUAGE_SPANISH
@ -36,7 +36,7 @@
// #define LANGUAGE_NORWEGIAN_BOKMAAL
/* master and remote slave unit functionality */
#define FEATURE_REMOTE_UNIT_SLAVE // uncomment this to make this unit a remote unit controlled by a host unit
// #define FEATURE_REMOTE_UNIT_SLAVE // uncomment this to make this unit a remote unit controlled by a host unit
// #define FEATURE_MASTER_WITH_SERIAL_SLAVE // [master]{remote_port}<-------serial-------->{control_port}[slave]
// #define FEATURE_MASTER_WITH_ETHERNET_SLAVE // [master]<-------------------ethernet--------------------->[slave]

View File

@ -111,7 +111,7 @@ You can tweak these, but read the online documentation!
#define ELEVATION_TOLERANCE 0.1 //1.0
#define OPERATION_TIMEOUT 120000 // timeout for any rotation operation in mS ; 120 seconds is usually enough unless you have the speed turned down
#define REMOTE_UNIT_ROTATION_TIMEOUT 5000 // timeout any remote unit rotation operation if a ping (PG) is not receive within 5 seconds
#define MASTER_REMOTE_LINK_PING_TIME_MS 5000
#define TIMED_INTERVAL_ARRAY_SIZE 20

View File

@ -121,7 +121,7 @@ You can tweak these, but read the online documentation!
#define ELEVATION_TOLERANCE 5.0
#define OPERATION_TIMEOUT 120000 // timeout for any rotation operation in mS ; 120 seconds is usually enough unless you have the speed turned down
#define REMOTE_UNIT_ROTATION_TIMEOUT 5000 // timeout any remote unit rotation operation if a ping (PG) is not receive within 5 seconds
#define MASTER_REMOTE_LINK_PING_TIME_MS 5000
#define TIMED_INTERVAL_ARRAY_SIZE 20
@ -181,9 +181,9 @@ You can tweak these, but read the online documentation!
#define COMMAND_BUFFER_SIZE 50
#define REMOTE_BUFFER_TIMEOUT_MS 250
#define REMOTE_UNIT_COMMAND_TIMEOUT_MS 2000
#define AZ_REMOTE_UNIT_QUERY_TIME_MS 150 // how often we query the remote remote for azimuth
#define EL_REMOTE_UNIT_QUERY_TIME_MS 150 // how often we query the remote remote for elevation
// #define REMOTE_UNIT_COMMAND_TIMEOUT_MS 2000
// #define AZ_REMOTE_UNIT_QUERY_TIME_MS 150 // how often we query the remote remote for azimuth
// #define EL_REMOTE_UNIT_QUERY_TIME_MS 150 // how often we query the remote remote for elevation
#define AZIMUTH_SMOOTHING_FACTOR 0 // value = 0 to 99.9
#define ELEVATION_SMOOTHING_FACTOR 0 // value = 0 to 99.9
@ -354,7 +354,7 @@ You can tweak these, but read the online documentation!
#define CONTROL_PORT_MAPPED_TO &Serial // change this line to map the control port to a different serial port (Serial1, Serial2, etc.)
#define CONTROL_PORT_BAUD_RATE 115200
#define REMOTE_PORT Serial3 // used to control remote unit
#define REMOTE_UNIT_PORT_BAUD_RATE 9600
#define REMOTE_UNIT_PORT_BAUD_RATE 57600
#define GPS_PORT Serial2
#define GPS_PORT_BAUD_RATE 9600
// #define GPS_MIRROR_PORT Serial1 // use this to mirror output from a GPS unit into the Arduino out another port (uncomment to enable)

View File

@ -111,7 +111,7 @@ You can tweak these, but read the online documentation!
#define ELEVATION_TOLERANCE 0.01 //1.0
#define OPERATION_TIMEOUT 120000 // timeout for any rotation operation in mS ; 120 seconds is usually enough unless you have the speed turned down
#define REMOTE_UNIT_ROTATION_TIMEOUT 5000 // timeout any remote unit rotation operation if a ping (PG) is not receive within 5 seconds
#define MASTER_REMOTE_LINK_PING_TIME_MS 5000
#define REMOTE_UNIT_ROTATION_COMMAND_REPEAT_MS 500 // used by the master unit; this need to be less than OPERATION_TIMEOUT on the remote unit
@ -173,9 +173,9 @@ You can tweak these, but read the online documentation!
#define COMMAND_BUFFER_SIZE 50
#define REMOTE_BUFFER_TIMEOUT_MS 250
#define REMOTE_UNIT_COMMAND_TIMEOUT_MS 2000
#define AZ_REMOTE_UNIT_QUERY_TIME_MS 150 // how often we query the remote remote for azimuth
#define EL_REMOTE_UNIT_QUERY_TIME_MS 150 // how often we query the remote remote for elevation
// #define REMOTE_UNIT_COMMAND_TIMEOUT_MS 2000
// #define AZ_REMOTE_UNIT_QUERY_TIME_MS 150 // how often we query the remote remote for azimuth
// #define EL_REMOTE_UNIT_QUERY_TIME_MS 150 // how often we query the remote remote for elevation
#define AZIMUTH_SMOOTHING_FACTOR 0 // value = 0 to 99.9
#define ELEVATION_SMOOTHING_FACTOR 0 // value = 0 to 99.9
@ -197,10 +197,10 @@ You can tweak these, but read the online documentation!
#define SERIAL_LED_TIME_MS 250
// #define DEFAULT_LATITUDE 1.0
// #define DEFAULT_LONGITUDE -2.0
#define DEFAULT_LATITUDE 40.889958
#define DEFAULT_LONGITUDE -75.585972
#define DEFAULT_LATITUDE 1.0
#define DEFAULT_LONGITUDE -2.0
// #define DEFAULT_LATITUDE 40.889958
// #define DEFAULT_LONGITUDE -75.585972
#define MOON_TRACKING_CHECK_INTERVAL 5000 // This is only written to the configuration upon first boot of the code or when EEPROM_MAGIC_NUMBER is changed in rotator.h
#define MOON_AOS_AZIMUTH_MIN 0
@ -348,8 +348,8 @@ You can tweak these, but read the online documentation!
// Changed in 2020.06.26.02
// Serial Port Settings
#define CONTROL_PORT_MAPPED_TO &Serial3 // change this line to map the control port to a different serial port (Serial1, Serial2, etc.)
#define CONTROL_PORT_BAUD_RATE 9600 //115200
#define CONTROL_PORT_MAPPED_TO &Serial // change this line to map the control port to a different serial port (Serial1, Serial2, etc.)
#define CONTROL_PORT_BAUD_RATE 115200 //57600
#define REMOTE_PORT Serial3 // used to control remote unit
#define REMOTE_UNIT_PORT_BAUD_RATE 9600
#define GPS_PORT Serial2

View File

@ -24,6 +24,44 @@
// So, here it is!
//
/*
Copyright 2011, Mark VandeWettering. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
THIS SOFTWARE IS PROVIDED BY MARK VANDEWETTERING ''AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation
are those of the authors and should not be interpreted as representing
official policies, either expressed or implied, of Mark VandeWettering
*/
// Modification by Anthony Good, K3NG 2020-07-24: Changed DateTime to SatDateTime to avoid a conflict with an RTC library I'm using
// Modification by Anthony Good, K3NG 2022-02-20: Added Observer.update_location function
#include "P13.h"
double
@ -184,6 +222,45 @@ Observer::Observer(const char *nm, double lat, double lng, double hgt)
V[2] = 0 ;
}
// START - 2022-02-20 Added by Goody K3NG
void
Observer::update_location(const char *nm, double lat, double lng, double hgt)
{
this->name = nm ;
LA = RADIANS(lat) ;
LO = RADIANS(lng) ;
HT = hgt / 1000 ;
U[0] = cos(LA)*cos(LO) ;
U[1] = cos(LA)*sin(LO) ;
U[2] = sin(LA) ;
E[0] = -sin(LO) ;
E[1] = cos(LO) ;
E[2] = 0. ;
N[0] = -sin(LA)*cos(LO) ;
N[1] = -sin(LA)*sin(LO) ;
N[2] = cos(LA) ;
double RP = RE * (1 - FL) ;
double XX = RE * RE ;
double ZZ = RP * RP ;
double D = sqrt(XX*cos(LA)*cos(LA) +
ZZ*sin(LA)*sin(LA)) ;
double Rx = XX / D + HT ;
double Rz = ZZ / D + HT ;
O[0] = Rx * U[0] ;
O[1] = Rx * U[1] ;
O[2] = Rz * U[2] ;
V[0] = -O[1] * W0 ;
V[1] = O[0] * W0 ;
V[2] = 0 ;
}
// END - 2022-02-20 Added by Goody K3NG
//----------------------------------------------------------------------
// _ ___ _ _ _ _ _
// __| |__ _ ______ / __| __ _| |_ ___| | (_) |_ ___

View File

@ -58,7 +58,9 @@ official policies, either expressed or implied, of Mark VandeWettering
*/
// Modification by Anthony Good, K3NG 2020-07-24: Change DateTime to SatDateTime to avoid a conflict with an RTC library I'm using
// Modification by Anthony Good, K3NG 2020-07-24: Changed DateTime to SatDateTime to avoid a conflict with an RTC library I'm using
// Modification by Anthony Good, K3NG 2022-02-20: Added Observer.update_location function
//----------------------------------------------------------------------
@ -139,6 +141,8 @@ public:
Observer(const char *, double, double, double) ;
~Observer() { } ;
void update_location(const char *nm, double lat, double lng, double hgt); // 2022-02-20 Added by Goody K3NG
} ;
//----------------------------------------------------------------------
@ -147,7 +151,7 @@ public:
class Satellite {
long N ;
long YE ;
long DE ;
long DE ;
double TE ;
double IN ;
double RA ;
@ -171,7 +175,9 @@ class Satellite {
double RS ;
public:
const char *name ;
const char *name ;
Vec3 SAT, VEL ; // celestial coordinates
Vec3 S, V ; // geocentric coordinates