2021.12.27.02

Tested FEATURE_MASTER_SEND_AZ_ROTATION_COMMANDS_TO_REMOTE and FEATURE_MASTER_SEND_EL_ROTATION_COMMANDS_TO_REMOTE and fixed issue with link pings (PG) being sent way too often
This commit is contained in:
k3ng 2021-12-27 20:23:49 -05:00
parent c227afd269
commit 921280ca2b
7 changed files with 48 additions and 42 deletions

View File

@ -1076,6 +1076,8 @@
\U command: query sun azimuth and elevation
Still working on FEATURE_CALIBRATION
2021.12.27.02
Tested FEATURE_MASTER_SEND_AZ_ROTATION_COMMANDS_TO_REMOTE and FEATURE_MASTER_SEND_EL_ROTATION_COMMANDS_TO_REMOTE and fixed issue with link pings (PG) being sent way too often
All library files should be placed in directories likes \sketchbook\libraries\library1\ , \sketchbook\libraries\library2\ , etc.
Anything rotator_*.* should be in the ino directory!
@ -4006,6 +4008,7 @@ void check_serial(){
// }
if (remote_port_rx_sniff) {
control_port->write(incoming_serial_byte);
control_port->flush();
}
#endif //defined(FEATURE_REMOTE_UNIT_SLAVE) || defined(FEATURE_YAESU_EMULATION) || defined(FEATURE_EASYCOM_EMULATION)
@ -13372,7 +13375,7 @@ void service_remote_communications_incoming_buffer(){
debug.print(remote_unit_port_buffer_index);
debug.print(" buffer: ");
for (int x = 0; x < remote_unit_port_buffer_index; x++) {
debug_write((char*)remote_unit_port_buffer[x]);
debug.write((char*)remote_unit_port_buffer[x]);
debug.println("$");
}
#endif // DEBUG_SVC_REMOTE_COMM_INCOMING_BUFFER
@ -13401,7 +13404,7 @@ void service_remote_communications_incoming_buffer(){
}
break;
#endif //OPTION_SYNC_MASTER_COORDINATES_TO_SLAVE
#ifdef OPTION_SYNC_MASTER_CLOCK_TO_SLAVE
#if defined(OPTION_SYNC_MASTER_CLOCK_TO_SLAVE) && defined(FEATURE_CLOCK)
case REMOTE_UNIT_GS_COMMAND:
if ((remote_unit_port_buffer[0] == 'G') && (remote_unit_port_buffer[1] == 'S')){
if (remote_unit_port_buffer[2] == '1'){
@ -13477,19 +13480,19 @@ void service_remote_communications_incoming_buffer(){
case REMOTE_UNIT_AZ_COMMAND:
if ((remote_unit_port_buffer_index == 13) && (remote_unit_port_buffer[0] == 'A') && (remote_unit_port_buffer[1] == 'Z') &&
(is_ascii_number(remote_unit_port_buffer[2])) && (is_ascii_number(remote_unit_port_buffer[3])) && (is_ascii_number(remote_unit_port_buffer[4])) && (is_ascii_number(remote_unit_port_buffer[6])) && (is_ascii_number(remote_unit_port_buffer[7])) && (is_ascii_number(remote_unit_port_buffer[8])) && (is_ascii_number(remote_unit_port_buffer[9])) && (is_ascii_number(remote_unit_port_buffer[10])) && (is_ascii_number(remote_unit_port_buffer[11]))) {
remote_unit_command_result_float = ((remote_unit_port_buffer[2] - 48) * 100) + ((remote_unit_port_buffer[3] - 48) * 10) + (remote_unit_port_buffer[4] - 48) + ((remote_unit_port_buffer[6] - 48) / 10.0) + ((remote_unit_port_buffer[7] - 48) / 100.0) + ((remote_unit_port_buffer[8] - 48) / 1000.0) + ((remote_unit_port_buffer[9] - 48) / 10000.0) + ((remote_unit_port_buffer[10] - 48) / 100000.0) + ((remote_unit_port_buffer[11] - 48) / 1000000.0);
remote_unit_command_result_float = float((remote_unit_port_buffer[2] - 48) * 100) + float((remote_unit_port_buffer[3] - 48) * 10) + float(remote_unit_port_buffer[4] - 48) + (float(remote_unit_port_buffer[6] - 48) / (float)10.0) + (float(remote_unit_port_buffer[7] - 48) / (float)100.0) + (float(remote_unit_port_buffer[8] - 48) / (float)1000.0) + (float(remote_unit_port_buffer[9] - 48) / (float)10000.0) + (float(remote_unit_port_buffer[10] - 48) / (float)100000.0) + (float(remote_unit_port_buffer[11] - 48) / (float)1000000.0);
good_data = 1;
}
break;
case REMOTE_UNIT_EL_COMMAND:
if ((remote_unit_port_buffer_index == 14) && (remote_unit_port_buffer[0] == 'E') && (remote_unit_port_buffer[1] == 'L') &&
(is_ascii_number(remote_unit_port_buffer[3])) && (is_ascii_number(remote_unit_port_buffer[4])) && (is_ascii_number(remote_unit_port_buffer[5])) && (is_ascii_number(remote_unit_port_buffer[7])) && (is_ascii_number(remote_unit_port_buffer[8])) && (is_ascii_number(remote_unit_port_buffer[9])) && (is_ascii_number(remote_unit_port_buffer[10])) && (is_ascii_number(remote_unit_port_buffer[11])) && (is_ascii_number(remote_unit_port_buffer[12]))) {
remote_unit_command_result_float = ((remote_unit_port_buffer[3] - 48) * 100) + ((remote_unit_port_buffer[4] - 48) * 10) + (remote_unit_port_buffer[5] - 48) + ((remote_unit_port_buffer[7] - 48) / 10.0) + ((remote_unit_port_buffer[8] - 48) / 100.0) + ((remote_unit_port_buffer[9] - 48) / 1000.0) + ((remote_unit_port_buffer[10] - 48) / 10000.0) + ((remote_unit_port_buffer[11] - 48) / 100000.0) + ((remote_unit_port_buffer[12] - 48) / 1000000.0);
remote_unit_command_result_float = (float(remote_unit_port_buffer[3] - 48) * 100) + float((remote_unit_port_buffer[4] - 48) * 10) + float(remote_unit_port_buffer[5] - 48) + (float(remote_unit_port_buffer[7] - 48) / (float)10.0) + (float(remote_unit_port_buffer[8] - 48) / (float)100.0) + (float(remote_unit_port_buffer[9] - 48) / (float)1000.0) + (float(remote_unit_port_buffer[10] - 48) / (float)10000.0) + (float(remote_unit_port_buffer[11] - 48) / (float)100000.0) + (float(remote_unit_port_buffer[12] - 48) / (float)1000000.0);
if (remote_unit_port_buffer[2] == '+') {
good_data = 1;
}
if (remote_unit_port_buffer[2] == '-') {
remote_unit_command_result_float = remote_unit_command_result_float * -1.0;
remote_unit_command_result_float = remote_unit_command_result_float * (float)-1.0;
good_data = 1;
}
}
@ -13529,7 +13532,7 @@ void service_remote_communications_incoming_buffer(){
debug.print(remote_unit_port_buffer_index);
debug.print(" buffer: ");
for (int x = 0; x < remote_unit_port_buffer_index; x++) {
debug_write((char*)remote_unit_port_buffer[x]);
debug.write((char*)remote_unit_port_buffer[x]);
}
debug.println("$");
#endif // DEBUG_SVC_REMOTE_COMM_INCOMING_BUFFER_BAD_DATA
@ -22139,7 +22142,7 @@ void send_vt100_code(char* code_to_send){
static unsigned long last_pg_send_time = REMOTE_UNIT_ROTATION_TIMEOUT;
if ((millis() - last_pg_send_time) > ((long)REMOTE_UNIT_ROTATION_TIMEOUT * (long)0.8)){
if ((float)(millis() - (float)last_pg_send_time) > ((float)REMOTE_UNIT_ROTATION_TIMEOUT * (float)0.8)){
submit_remote_command(REMOTE_UNIT_PG_COMMAND,0,0);
last_pg_send_time = millis();
}

View File

@ -40,6 +40,9 @@
// #define FEATURE_MASTER_WITH_SERIAL_SLAVE // [master]{remote_port}<-------serial-------->{control_port}[slave]
// #define FEATURE_MASTER_WITH_ETHERNET_SLAVE // [master]<-------------------ethernet--------------------->[slave]
// #define FEATURE_MASTER_SEND_AZ_ROTATION_COMMANDS_TO_REMOTE
// #define FEATURE_MASTER_SEND_EL_ROTATION_COMMANDS_TO_REMOTE
//#define FEATURE_ADC_RESOLUTION12 // 12 bit ADC resolution for Teensy 3.x, Arduino Due Zero MKR families
/* position sensors - pick one for azimuth and one for elevation if using an az/el rotator */

View File

@ -12,26 +12,24 @@
*/
#define DEVELOPMENT_TIMELIB
#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_EASYCOM_EMULATION // Easycom protocol emulation on control port (undefine FEATURE_YAESU_EMULATION above)
// #define FEATURE_DCU_1_EMULATION // DCU-1 protocol emulation on control port
#define FEATURE_MOON_TRACKING
#define FEATURE_SUN_TRACKING
// #define FEATURE_MOON_TRACKING
// #define FEATURE_SUN_TRACKING
#define FEATURE_CLOCK
#define FEATURE_GPS
// #define FEATURE_GPS
// #define FEATURE_RTC_DS1307
// #define FEATURE_RTC_PCF8583
// #define FEATURE_RTC_TEENSY // Requires DEVELOPMENT_TIMELIB at the moment
// #define FEATURE_ETHERNET
#define FEATURE_STEPPER_MOTOR // Requires TimerFive library to be copied to the Arduino libraries directory (If using OPTION_STEPPER_MOTOR_USE_TIMER_ONE_INSTEAD_OF_FIVE below, copy the TimeOne library)
// #define FEATURE_STEPPER_MOTOR // Requires TimerFive library to be copied to the Arduino libraries directory (If using OPTION_STEPPER_MOTOR_USE_TIMER_ONE_INSTEAD_OF_FIVE below, copy the TimeOne library)
// #define FEATURE_AUTOCORRECT
// #define FEATURE_TEST_DISPLAY_AT_STARTUP
#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 TEST_NEW_SAT_CALC
#define LANGUAGE_ENGLISH // all languages customized in rotator_language.h
@ -47,8 +45,10 @@
/* 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_MASTER_WITH_SERIAL_SLAVE // [master]{remote_port}<-------serial-------->{control_port}[slave]
#define FEATURE_MASTER_WITH_SERIAL_SLAVE // [master]{remote_port}<-------serial-------->{control_port}[slave]
// #define FEATURE_MASTER_WITH_ETHERNET_SLAVE // [master]<-------------------ethernet--------------------->[slave]
#define FEATURE_MASTER_SEND_AZ_ROTATION_COMMANDS_TO_REMOTE
#define FEATURE_MASTER_SEND_EL_ROTATION_COMMANDS_TO_REMOTE
// #define FEATURE_ADC_RESOLUTION12 // 12 bit ADC resolution for Teensy 3.x, Arduino Due Zero MKR families
@ -56,11 +56,11 @@
// #define FEATURE_AZ_POSITION_POTENTIOMETER //this is used for both a voltage from a rotator control or a homebrew rotator with a potentiometer
// #define FEATURE_AZ_POSITION_ROTARY_ENCODER
// #define FEATURE_AZ_POSITION_ROTARY_ENCODER_USE_PJRC_LIBRARY // library @ http://www.pjrc.com/teensy/td_libs_Encoder.html
#define FEATURE_AZ_POSITION_PULSE_INPUT
// #define FEATURE_AZ_POSITION_PULSE_INPUT
// #define FEATURE_AZ_POSITION_HMC5883L // HMC5883L digital compass support
// #define FEATURE_AZ_POSITION_DFROBOT_QMC5883 // QMC5883 digital compass support using DFRobot library at https://github.com/DFRobot/DFRobot_QMC5883
// #define FEATURE_AZ_POSITION_HMC5883L_USING_JARZEBSKI_LIBRARY // HMC5883L digital compass support using Jarzebski library at https://github.com/jarzebski/Arduino-HMC5883L
// #define FEATURE_AZ_POSITION_GET_FROM_REMOTE_UNIT // requires FEATURE_MASTER_WITH_SERIAL_SLAVE or FEATURE_MASTER_WITH_ETHERNET_SLAVE
#define FEATURE_AZ_POSITION_GET_FROM_REMOTE_UNIT // requires FEATURE_MASTER_WITH_SERIAL_SLAVE or FEATURE_MASTER_WITH_ETHERNET_SLAVE
// #define FEATURE_AZ_POSITION_ADAFRUIT_LSM303 // Uncomment for azimuth using LSM303 compass and Adafruit library (https://github.com/adafruit/Adafruit_LSM303) (also uncomment object declaration below)
// #define FEATURE_AZ_POSITION_POLOLU_LSM303 // Uncomment for azimuth using LSM303 compass and Polulu library
// #define FEATURE_AZ_POSITION_HH12_AS5045_SSI
@ -72,10 +72,10 @@
// #define FEATURE_EL_POSITION_POTENTIOMETER
// #define FEATURE_EL_POSITION_ROTARY_ENCODER
// #define FEATURE_EL_POSITION_ROTARY_ENCODER_USE_PJRC_LIBRARY // library @ http://www.pjrc.com/teensy/td_libs_Encoder.html
#define FEATURE_EL_POSITION_PULSE_INPUT
// #define FEATURE_EL_POSITION_PULSE_INPUT
// #define FEATURE_EL_POSITION_ADXL345_USING_LOVE_ELECTRON_LIB // Uncomment for elevation ADXL345 accelerometer support using ADXL345 library
// #define FEATURE_EL_POSITION_ADXL345_USING_ADAFRUIT_LIB // Uncomment for elevation ADXL345 accelerometer support using Adafruit library
// #define FEATURE_EL_POSITION_GET_FROM_REMOTE_UNIT // requires FEATURE_MASTER_WITH_SERIAL_SLAVE or FEATURE_MASTER_WITH_ETHERNET_SLAVE
#define FEATURE_EL_POSITION_GET_FROM_REMOTE_UNIT // requires FEATURE_MASTER_WITH_SERIAL_SLAVE or FEATURE_MASTER_WITH_ETHERNET_SLAVE
// #define FEATURE_EL_POSITION_ADAFRUIT_LSM303 // Uncomment for elevation using LSM303 accelerometer and Adafruit library (https://github.com/adafruit/Adafruit_LSM303) (also uncomment object declaration below)
// #define FEATURE_EL_POSITION_POLOLU_LSM303 // Uncomment for elevation using LSM303 compass and Polulu library
// #define FEATURE_EL_POSITION_HH12_AS5045_SSI
@ -95,14 +95,14 @@
// #define FEATURE_FABO_LCD_PCF8574_DISPLAY
// #define FEATURE_HD44780_I2C_DISPLAY // Not working yet
#define FEATURE_NEXTION_DISPLAY // Documentation: https://github.com/k3ng/k3ng_rotator_controller/wiki/425-Human-Interface:-Nextion-Display
// #define FEATURE_NEXTION_DISPLAY // Documentation: https://github.com/k3ng/k3ng_rotator_controller/wiki/425-Human-Interface:-Nextion-Display
// #define FEATURE_ANALOG_OUTPUT_PINS
// #define FEATURE_SUN_PUSHBUTTON_AZ_EL_CALIBRATION
// #define FEATURE_MOON_PUSHBUTTON_AZ_EL_CALIBRATION
#define FEATURE_AUDIBLE_ALERT
// #define FEATURE_AUDIBLE_ALERT
/* preset rotary encoder features and options */
// #define FEATURE_AZ_PRESET_ENCODER // Uncomment for Rotary Encoder Azimuth Preset support
@ -126,8 +126,8 @@
// #define FEATURE_LIMIT_SENSE
// #define FEATURE_TIMED_BUFFER // Support for Yaesu timed buffer commands
// #define OPTION_SERIAL_HELP_TEXT // Yaesu help command prints help
#define FEATURE_PARK
#define FEATURE_AUTOPARK // Requires FEATURE_PARK
// #define FEATURE_PARK
// #define FEATURE_AUTOPARK // Requires FEATURE_PARK
// #define OPTION_AZ_MANUAL_ROTATE_LIMITS // this option will automatically stop the L and R commands when hitting a CCW or CW limit (settings below - AZ_MANUAL_ROTATE_*_LIMIT)
// #define OPTION_EL_MANUAL_ROTATE_LIMITS
//#define OPTION_C_COMMAND_SENDS_AZ_AND_EL // uncomment this when using Yaesu emulation with Ham Radio Deluxe
@ -169,8 +169,8 @@
//#define FEATURE_POWER_SWITCH
//#define OPTION_EXTERNAL_ANALOG_REFERENCE //Activate external analog voltage reference (needed for RemoteQTH.com unit)
// #define OPTION_SYNC_MASTER_CLOCK_TO_SLAVE // use when GPS unit is connected to slave unit and you want to synchronize the master unit clock to the slave unit GPS clock
//#define OPTION_SYNC_MASTER_COORDINATES_TO_SLAVE // use when GPS unit is connected to slave unit and you want to synchronize the master unit coordinates to the slave unit GPS
#define OPTION_SYNC_MASTER_CLOCK_TO_SLAVE // use when GPS unit is connected to slave unit and you want to synchronize the master unit clock to the slave unit GPS clock
#define OPTION_SYNC_MASTER_COORDINATES_TO_SLAVE // use when GPS unit is connected to slave unit and you want to synchronize the master unit coordinates to the slave unit GPS
//#define OPTION_DISABLE_HMC5883L_ERROR_CHECKING
// #define OPTION_HAMLIB_EASYCOM_AZ_EL_COMMAND_HACK
// #define OPTION_HAMLIB_EASYCOM_NO_TERMINATOR_CHARACTER_HACK
@ -204,7 +204,7 @@
#define OPTION_CLI_VT100
#define OPTION_GPS_USE_TINY_GPS_LIBRARY // For serial port based NMEA GPS units; serial port defined by GPS_PORT and GPS_PORT_BAUD_RATE in settings file
#define OPTION_GPS_USE_SPARKFUN_U_BLOX_GNSS_LIBRARY // For Sparkfun (and perhaps others) u-blox GPS units interfaced via I2C ( https://github.com/sparkfun/SparkFun_u-blox_GNSS_Arduino_Library)
// #define OPTION_GPS_USE_SPARKFUN_U_BLOX_GNSS_LIBRARY // For Sparkfun (and perhaps others) u-blox GPS units interfaced via I2C ( https://github.com/sparkfun/SparkFun_u-blox_GNSS_Arduino_Library)
#define OPTION_DEPRECATED_NEXTION_INIT_CODE_1 // use only with VK4GHZ Nextion firmware versions previous to 2021-10-23
// #define OPTION_DEPRECATED_NEXTION_INIT_CODE_2 // use only with VK4GHZ Nextion firmware versions previous to 2021-10-23

View File

@ -7,12 +7,12 @@
/* 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)
#define FEATURE_MOON_TRACKING
#define FEATURE_SUN_TRACKING
// #define FEATURE_MOON_TRACKING
// #define FEATURE_SUN_TRACKING
#define FEATURE_CLOCK
#define FEATURE_GPS
// #define FEATURE_RTC_DS1307
@ -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

@ -109,7 +109,10 @@ You can tweak these, but read the online documentation!
// various code settings
#define AZIMUTH_TOLERANCE 3.0 // rotator will stop within X degrees when doing autorotation
#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 TIMED_INTERVAL_ARRAY_SIZE 20
#define LCD_COLUMNS 20 //16

View File

@ -120,11 +120,8 @@ You can tweak these, but read the online documentation!
#define AZIMUTH_TOLERANCE 5.0 // rotator will stop within X degrees when doing autorotation
#define ELEVATION_TOLERANCE 5.0
#if defined(FEATURE_REMOTE_UNIT_SLAVE)
#define OPERATION_TIMEOUT 1000 // timeout for remote unit any rotation operation in mS - 1 second
#else
#define OPERATION_TIMEOUT 120000 // timeout for any rotation operation in mS ; 120 seconds is usually enough unless you have the speed turned down
#endif
#define REMOTE_UNIT_ROTATION_TIMEOUT 5000 // timeout any remote unit rotation operation if a ping (PG) is not receive within 5 seconds
#define TIMED_INTERVAL_ARRAY_SIZE 20
@ -171,7 +168,7 @@ You can tweak these, but read the online documentation!
#define EEPROM_WRITE_DIRTY_CONFIG_TIME 30 //time in seconds
#define DISPLAY_DECIMAL_PLACES 0
#define DISPLAY_DECIMAL_PLACES 1
#define AZ_POSITION_ROTARY_ENCODER_DEG_PER_PULSE 0.5
#define EL_POSITION_ROTARY_ENCODER_DEG_PER_PULSE 0.5
@ -356,7 +353,7 @@ You can tweak these, but read the online documentation!
// Serial Port Settings
#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_PORT Serial3 // used to control remote unit
#define REMOTE_UNIT_PORT_BAUD_RATE 9600
#define GPS_PORT Serial2
#define GPS_PORT_BAUD_RATE 9600

View File

@ -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 &Serial // change this line to map the control port to a different serial port (Serial1, Serial2, etc.)
#define CONTROL_PORT_BAUD_RATE 115200 //9600
#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 REMOTE_PORT Serial3 // used to control remote unit
#define REMOTE_UNIT_PORT_BAUD_RATE 9600
#define GPS_PORT Serial2