From 3453a14e8620190d43e83079d5fdb173c7e4858a Mon Sep 17 00:00:00 2001 From: Anthony Good Date: Thu, 7 May 2020 21:54:33 -0400 Subject: [PATCH] 2020.05.07.01 More work on FEATURE_NEXTION_DISPLAY Updated Nextion documentation: https://github.com/k3ng/k3ng_rotator_controller/wiki/425-Human-Interface:-Nextion-Display New Extended Backslash Commands \?AO - Azimuth Full CCW Calibration \?AF - Azimuth Full CW Calibration \?EO - Elevation Full DOWN Calibration \?EF - Elevation Full UP Calibration Fixed several issues with debug dump log Updated command reference: https://github.com/k3ng/k3ng_rotator_controller/wiki/820-Command-Reference --- ... - BASE - NX4832TO35 - v2020.05.07.01.HMI} | Bin 1315867 -> 1316530 bytes .../k3ng_rotator_controller.ino | 251 +++++++++++------- .../rotator_features_test.h | 8 +- .../rotator_settings_test.h | 2 +- 4 files changed, 159 insertions(+), 102 deletions(-) rename k3ng_rotator_controller/Nextion/{K3NG Rotator Controller - BASE - NX4832TO35 - v2020.05.06.01.HMI => K3NG Rotator Controller - BASE - NX4832TO35 - v2020.05.07.01.HMI} (95%) diff --git a/k3ng_rotator_controller/Nextion/K3NG Rotator Controller - BASE - NX4832TO35 - v2020.05.06.01.HMI b/k3ng_rotator_controller/Nextion/K3NG Rotator Controller - BASE - NX4832TO35 - v2020.05.07.01.HMI similarity index 95% rename from k3ng_rotator_controller/Nextion/K3NG Rotator Controller - BASE - NX4832TO35 - v2020.05.06.01.HMI rename to k3ng_rotator_controller/Nextion/K3NG Rotator Controller - BASE - NX4832TO35 - v2020.05.07.01.HMI index 67ca58e0ed895d4b647839f046ce19c8e7573dd5..6e645505a3ac3ddac7d9a1e308e38c6f22c4fdcd 100644 GIT binary patch delta 3710 zcmeH~`%@KV7{{OGh+Ge{yIee=bVL#85LX3l!opEU1SSacO2jdh$bciDCNs{_a4HQi zC%^@vES)B26h#wPQyVJ;rpAS^UhLOg6R4 z<+>K;^sW=3b)?>w55u1){)Vf0Ca?W}))kpf{|{0>F>rI$e-7mOz(eBM zGS%N9t`1V?Y!qt()Y?+0ObF8vF=F9Eh$&Nc zNg+y6uH2_+V3nJ_;t@3=M#`%*zmsIn(CW9wGF;hQA={kOFv@GhG6GpLPQN3|9@_GC zWZ6i%5?QhwS%bc1IkFyY%MjF}ZJDk|-V8xK+ICRuw$)iS7<{`elrw0=1Z79pWZ`-{ znuWDDhjZOB3gB-FwAl)9gY+u&2Q#S`vS*v@u{{HDlLnnkz>^@o-N3Kez^}!??|tHT z;kXnRt_1doHg(<>`Amr7ut?qwZIVst>czZbNjC_UK}4upo-v5Tl%?HQk5bQRuTu?G zh|=GWX{R0O6+(3z17*8Aj;Ma1z&}J(+eoJ(DprzCA`*tJ8<8+<-yjl(>M9~(`VJCd zsO}&U)Hayr7wb>mphJ`yV*j@S9MVu@pBam8~Jm16b! zfEMsete25_%PxS#0)9s=BQJV z-P-r7=A&q(uK;~?5rdWqNiX^-lRTA(KC+W`p^un;j6PyIAM={&LzuEm2V)8{y>cwq zm(e?{eG1J;x+AQ-rhI`Plm=cO$Df>prdARqwYh$j35dp zW&xN0z4o4pMPW21iJL~efUpAoESXFbO*O+%)a|{}NH;5B` z$8;U~juo{A^xZ&v4$j+##$$sNgYg;-#%t34i=sfc8+_MX#M@i!Dt@G$FBou&@+csP Yzb};RJQ?rU+X7u=d|RN23?FI#0DiMzbN~PV delta 3895 zcmeHJeNa?Y6hCj-1wj|N_w6pq0^(PLperIGeqd7LjAbT9q9tN0Dl#abqA2PtW(}!W zk;z5T0!;G*3ru{Xm6=moIyzcYeiTAwiHf7vA6k~3yWBVLy5qmi^oMum?f%~VI`?M@+5k>X1v=g}1jHXbZfD3Uf z!DsAJ28EhTVb4|IdB9I4hbY|XB@E)?&0iS4TGC8mTo8`!&a{B=-&mYef$vAJP{`#6 z#dmJBPFm+`qtL>~a9-+y{Okqpd9H={&Rg(R4~0TMMBf)foX<&LZl_Q=(>o7**@r!+ zLUvTgLF0Yatz4i&E%!ZdJ|uc?S0TY)kl^cvc1-jBPOej74jSYE^;OB?5F2FRLAgrW zdX`vMm77Y-O$t8z-wz)%J{ElZwQ^HH{k=yT1$d;<|F=e83E4+Z=4oZ~NRypi&nGtK zDWlhvAU1y)xzAd*l2CTDv+b((`q%V~NgK0@tO~Y<1zi4$SG^=m1j3dqp|PHm2rrnt zDFoXwM=tV&#%-?O`cd-2*S=Ja;5OO5I%R#HmMT90BHALg#4v zLe<}cltk^v{Uj%v_1dKtJ?NCPepa%B`tkD3-9g#2_2`as2+s+3)Fb5|1nn|($1egG zpgSrA_U{U?M&LJ*w(gouNLzPJ4bs+KvlD6SxB*$~?r1>Ph$rALK!ZekuSEMJq^-NA z(P_9~KflO?JG2M`ABgn2Mr&-Kdm>q{6(rocHRxCszj-+2u3iN&b3O_2=wZ*1!ahz4 z`_EF?+mW-*?GKcI&gY&a0kaf#vlMo7N7%hIEk@Lx;4g)}lf*x;`-9<)?5>4fCKK0N zzs=FM@#~H=Q9GE7UN14(C^1y2y6DIPRCGW4>_}=z58e7x)!_VCMU9&ioC;u5GKJ3l#RoMH0)VFT&E4UP%|TlJ}^E&8i}wvye&> ztNr>7$qZzYj+qiJrVKXZnGr)PE4qnz<-!3^u@fBvlES1gYy z?YNB2A=EFUz33*rDy@@pIbX`<04bM=l*`?uT#k}*IaSzm|}>zNfL9DB<3bb%m*bgACkrVi6rJvB{2_>#O#v9JkStx*HAWf z4YipI(+b_p{XE^p?pLY~ZQ?97aDlaPSvR+ hw89#7R`B|2Qy?3#5leA%SDT~a966w6?^X*;{{qw8rW^nO diff --git a/k3ng_rotator_controller/k3ng_rotator_controller.ino b/k3ng_rotator_controller/k3ng_rotator_controller.ino index c62fad5..d71071d 100644 --- a/k3ng_rotator_controller/k3ng_rotator_controller.ino +++ b/k3ng_rotator_controller/k3ng_rotator_controller.ino @@ -468,6 +468,18 @@ More work on FEATURE_NEXTION_DISPLAY Updated Nextion documentation: https://github.com/k3ng/k3ng_rotator_controller/wiki/425-Human-Interface:-Nextion-Display + 2020.05.07.01 + More work on FEATURE_NEXTION_DISPLAY + Updated Nextion documentation: https://github.com/k3ng/k3ng_rotator_controller/wiki/425-Human-Interface:-Nextion-Display + New Extended Backslash Commands + \?AO - Azimuth Full CCW Calibration + \?AF - Azimuth Full CW Calibration + \?EO - Elevation Full DOWN Calibration + \?EF - Elevation Full UP Calibration + Fixed several issues with debug dump log + Updated command reference: https://github.com/k3ng/k3ng_rotator_controller/wiki/820-Command-Reference + + All library files should be placed in directories likes \sketchbook\libraries\library1\ , \sketchbook\libraries\library2\ , etc. Anything rotator_*.* should be in the ino directory! @@ -479,7 +491,7 @@ */ -#define CODE_VERSION "2020.05.06.01" +#define CODE_VERSION "2020.05.07.01" #include #include @@ -4310,17 +4322,20 @@ uint16_t recvNextionRetString(char *buffer, uint16_t len, uint32_t timeout){ #if defined(FEATURE_NEXTION_DISPLAY) void service_nextion_display(){ + #define NEXTION_VERY_FREQUENT_UPDATE_MS 250 + #define NEXTION_FREQUENT_UPDATE_MS 500 + #define NEXTION_LESS_FREQUENT_UPDATE_MS 1000 + char workstring1[32] = ""; char workstring2[32] = ""; static int last_azimuth = 0; static unsigned long last_az_update = 0; static unsigned long last_various_things_update = 0; static unsigned long last_statuses_update = 0; - int temp = 0; + unsigned int temp = 0; char *buffer; uint16_t len; - #if defined(FEATURE_ELEVATION_CONTROL) static int last_elevation = 0; static unsigned long last_el_update = 0; @@ -4365,10 +4380,6 @@ void service_nextion_display(){ static unsigned long last_status3_update = 0; #endif - #define NEXTION_VERY_FREQUENT_UPDATE_MS 250 - #define NEXTION_FREQUENT_UPDATE_MS 500 - #define NEXTION_LESS_FREQUENT_UPDATE_MS 1000 - uint8_t serial_byte = 0; unsigned long last_serial_receive_time = 0; static int nextion_port_buffer_index = 0; @@ -4538,7 +4549,10 @@ void service_nextion_display(){ temp = temp | 16384; } -//zzzzzz + // Future: 32768 + // Future: 65536 + + dtostrf((int)temp, 1, 0, workstring1); @@ -4674,6 +4688,7 @@ TODO: \?EF - Elevation Full UP Calibration */ +//zzzzzz // vSS2 - Status String 2 - Parking Messages strcpy(workstring1,""); @@ -4931,6 +4946,64 @@ TODO: } #endif + #if defined(FEATURE_MOON_TRACKING) || defined(FEATURE_SUN_TRACKING) + + static unsigned long last_moon_and_sun_update = 0; + temp = 0; + + if ((millis() - last_moon_and_sun_update) > (NEXTION_LESS_FREQUENT_UPDATE_MS+525)){ + + #ifdef FEATURE_MOON_TRACKING + strcpy(workstring1,"vMAS.txt=\""); + dtostrf(moon_azimuth,0,2,workstring2); + strcpy(workstring1,workstring2); + strcpy(workstring1,"\""); + sendNextionCommand(workstring1); + + strcpy(workstring1,"vMES.txt=\""); + dtostrf(moon_elevation,0,2,workstring2); + strcpy(workstring1,workstring2); + strcpy(workstring1,"\""); + sendNextionCommand(workstring1); + + if (moon_tracking_active) { + temp = temp | 1; + } + if (moon_visible) { + temp = temp | 2; + } + #endif // FEATURE_MOON_TRACKING + + #ifdef FEATURE_SUN_TRACKING + + strcpy(workstring1,"vSAS.txt=\""); + dtostrf(sun_azimuth,0,2,workstring2); + strcpy(workstring1,workstring2); + strcpy(workstring1,"\""); + sendNextionCommand(workstring1); + + strcpy(workstring1,"vSES.txt=\""); + dtostrf(sun_elevation,0,2,workstring2); + strcpy(workstring1,workstring2); + strcpy(workstring1,"\""); + sendNextionCommand(workstring1); + + if (sun_tracking_active) { + temp = temp | 4; + } + if (sun_visible) { + temp = temp | 8; + } + #endif // FEATURE_SUN_TRACKING + + strcpy(workstring1,"gMSS="); + dtostrf(temp, 1, 0, workstring2); + strcat(workstring1,workstring2); + sendNextionCommand(workstring1); + + last_moon_and_sun_update = millis(); + } + #endif // defined(FEATURE_MOON_TRACKING) || defined(FEATURE_SUN_TRACKING) } #endif //FEATURE_NEXTION_DISPLAY @@ -6804,7 +6877,7 @@ void output_debug(){ #ifdef DEBUG_DUMP - char tempstring[32] = ""; + char tempstring[32]; #if defined(FEATURE_REMOTE_UNIT_SLAVE) || defined(CONTROL_PROTOCOL_EMULATION) || defined(UNDER_DEVELOPMENT_REMOTE_UNIT_COMMANDS) @@ -6863,8 +6936,11 @@ void output_debug(){ #if defined(FEATURE_MOON_TRACKING) || defined(FEATURE_SUN_TRACKING) debug.print("\t"); - sprintf(tempstring, "%s", coordinate_string()); - debug.print(tempstring); + dtostrf(latitude,0,4,tempstring); + debug.print(tempstring); + debug.print(" "); + dtostrf(longitude,0,4,tempstring); + debug.print(tempstring); debug.print(" "); debug.print(coordinates_to_maidenhead(latitude,longitude)); #endif @@ -7172,17 +7248,46 @@ void output_debug(){ debug.println(""); #endif - - - #ifdef FEATURE_MOON_TRACKING update_moon_position(); - debug.print(moon_status_string()); + debug.print("\tmoon: AZ:"); + dtostrf(moon_azimuth,0,2,tempstring); + debug.print(tempstring); + debug.print(" EL:"); + dtostrf(moon_elevation,0,2,tempstring); + debug.print(tempstring); + debug.print(" TRACKING_"); + if (!moon_tracking_active) { + debug.print("IN"); + } + debug.print("ACTIVE "); + if (moon_tracking_active) { + if (!moon_visible) { + debug.print("NOT_"); + } + debug.print("VISIBLE"); + } #endif // FEATURE_MOON_TRACKING #ifdef FEATURE_SUN_TRACKING update_sun_position(); - debug.print(sun_status_string()); + debug.print("\tsun: AZ:"); + dtostrf(sun_azimuth,0,2,tempstring); + debug.print(tempstring); + debug.print(" EL:"); + dtostrf(sun_elevation,0,2,tempstring); + debug.print(tempstring); + debug.print(" TRACKING_"); + if (!sun_tracking_active) { + debug.print("IN"); + } + debug.print("ACTIVE "); + if (sun_tracking_active) { + if (!sun_visible) { + debug.print("NOT_"); + } + debug.print("VISIBLE"); + } #endif // FEATURE_SUN_TRACKING #if defined(FEATURE_MOON_TRACKING) || defined(FEATURE_SUN_TRACKING) @@ -7229,7 +7334,7 @@ void output_debug(){ #ifdef FEATURE_AUTOCORRECT - debug.print("\t\tAutocorrect: AZ:"); + debug.print("\tAutocorrect: AZ:"); switch(autocorrect_state_az){ case AUTOCORRECT_INACTIVE: debug.print("INACTIVE"); break; case AUTOCORRECT_WAITING_AZ: debug.print("AUTOCORRECT_WAITING_AZ: "); debug.print(autocorrect_az,2); break; @@ -11930,7 +12035,7 @@ byte calibrate_az_el(float new_az, float new_el){ #if defined(FEATURE_MOON_TRACKING) || defined(FEATURE_SUN_TRACKING) char * az_el_calibrated_string(){ - char return_string[48] = ""; + static char return_string[48] = ""; char tempstring[16] = ""; read_azimuth(1); @@ -13489,7 +13594,38 @@ byte process_backslash_command(byte input_buffer[], int input_buffer_index, byte strcat(return_string,CODE_VERSION); } + if ((input_buffer[2] == 'A') && (input_buffer[3] == 'O')) { // \?AO - Azimuth Full CCW Calibration + read_azimuth(1); + configuration.analog_az_full_ccw = analog_az; + write_settings_to_eeprom(); + strcpy(return_string,"\\!OKAO"); + } + + if ((input_buffer[2] == 'A') && (input_buffer[3] == 'F')) { // \?AF - Azimuth Full CW Calibration + read_azimuth(1); + configuration.analog_az_full_cw = analog_az; + write_settings_to_eeprom(); + strcpy(return_string,"\\!OKAF"); + } + + #if defined(FEATURE_ELEVATION_CONTROL) + if ((input_buffer[2] == 'E') && (input_buffer[3] == 'O')) { // \?EO - Elevation Full DOWN Calibration + read_elevation(1); + configuration.analog_el_0_degrees = analog_el; + write_settings_to_eeprom(); + strcpy(return_string,"\\!OKEO"); + } + + if ((input_buffer[2] == 'E') && (input_buffer[3] == 'F')) { // \?EF - Elevation Full UP Calibration + read_elevation(1); + configuration.analog_el_max_elevation = analog_el; + write_settings_to_eeprom(); + strcpy(return_string,"\\!OKEF"); + } + #endif + } //if (input_buffer_index == 4) + if (input_buffer_index == 6){ if ((input_buffer[2] == 'D') && (input_buffer[3] == 'O')) { // \?DOxx - digital pin initialize as output; xx = pin # (01, 02, A0,etc.) @@ -15396,85 +15532,6 @@ void check_sun_pushbutton_calibration(){ } #endif //defined(FEATURE_SUN_PUSHBUTTON_AZ_EL_CALIBRATION) && defined(FEATURE_SUN_TRACKING) -//------------------------------------------------------- - -#if defined(FEATURE_SUN_TRACKING) || defined(FEATURE_MOON_TRACKING) -char * coordinate_string(){ - - char returnstring[32] = ""; - char tempstring[12] = ""; - - dtostrf(latitude,0,4,returnstring); - strcat(returnstring," "); - dtostrf(longitude,0,4,tempstring); - strcat(returnstring,tempstring); - return returnstring; - -} -#endif //defined(FEATURE_SUN_TRACKING) || defined(FEATURE_MOON_TRACKING) - -// -------------------------------------------------------------- - -#ifdef FEATURE_MOON_TRACKING -char * moon_status_string(){ - - char returnstring[128] = ""; - char tempstring[16] = ""; - - strcpy(returnstring,"\tmoon: AZ:"); - dtostrf(moon_azimuth,0,2,tempstring); - strcat(returnstring,tempstring); - strcat(returnstring," EL:"); - dtostrf(moon_elevation,0,2,tempstring); - strcat(returnstring,tempstring); - strcat(returnstring," TRACKING_"); - if (!moon_tracking_active) { - strcat(returnstring,"IN"); - } - strcat(returnstring,"ACTIVE "); - if (moon_tracking_active) { - if (!moon_visible) { - strcat(returnstring,"NOT_"); - } - strcat(returnstring,"VISIBLE"); - } - return returnstring; -} -#endif // FEATURE_MOON_TRACKING -// -------------------------------------------------------------- -#ifdef FEATURE_SUN_TRACKING -char * sun_status_string(){ - - char returnstring[128] = ""; - char tempstring[16] = ""; - - strcpy(returnstring,"\tsun: AZ:"); - dtostrf(sun_azimuth,0,2,tempstring); - strcat(returnstring,tempstring); - strcat(returnstring," EL:"); - dtostrf(sun_elevation,0,2,tempstring); - strcat(returnstring,tempstring); - strcat(returnstring," TRACKING_"); - if (!sun_tracking_active) { - strcat(returnstring,"IN"); - } - strcat(returnstring,"ACTIVE "); - if (sun_tracking_active) { - if (!sun_visible) { - strcat(returnstring,"NOT_"); - } - strcat(returnstring,"VISIBLE"); - } - return returnstring; -} -#endif // FEATURE_SUN_TRACKING -// -------------------------------------------------------------- - - - - - - //------------------------------------------------------ #if defined(FEATURE_STEPPER_MOTOR) diff --git a/k3ng_rotator_controller/rotator_features_test.h b/k3ng_rotator_controller/rotator_features_test.h index 9586913..10fa759 100755 --- a/k3ng_rotator_controller/rotator_features_test.h +++ b/k3ng_rotator_controller/rotator_features_test.h @@ -17,8 +17,8 @@ // #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_RTC_DS1307 @@ -152,10 +152,10 @@ // #define OPTION_DISPLAY_BIG_CLOCK // display date & time clock (set row with #define LCD_BIG_CLOCK_ROW) //#define OPTION_CLOCK_ALWAYS_HAVE_HOUR_LEADING_ZERO #define OPTION_DISPLAY_GPS_INDICATOR // display GPS indicator on LCD - set position with LCD_GPS_INDICATOR_POSITION and LCD_GPS_INDICATOR_ROW -// #define OPTION_DISPLAY_MOON_TRACKING_CONTINUOUSLY +#define OPTION_DISPLAY_MOON_TRACKING_CONTINUOUSLY //#define OPTION_DISPLAY_DIRECTION_STATUS // N, W, E, S, NW, etc. direction indicator // #define OPTION_DISPLAY_SUN_TRACKING_CONTINUOUSLY -#define OPTION_DISPLAY_MOON_OR_SUN_TRACKING_CONDITIONAL +// #define OPTION_DISPLAY_MOON_OR_SUN_TRACKING_CONDITIONAL #define OPTION_DISPLAY_VERSION_ON_STARTUP //code provided by Paolo, IT9IPQ // #define OPTION_LCD_HEADING_FIELD_FIXED_DECIMAL_PLACE diff --git a/k3ng_rotator_controller/rotator_settings_test.h b/k3ng_rotator_controller/rotator_settings_test.h index dc3f975..6a65f06 100755 --- a/k3ng_rotator_controller/rotator_settings_test.h +++ b/k3ng_rotator_controller/rotator_settings_test.h @@ -137,7 +137,7 @@ You can tweak these, but read the online documentation! #define LCD_BIG_CLOCK_ROW 4 #define LCD_GPS_INDICATOR_POSITION RIGHT //LEFT or RIGHT #define LCD_GPS_INDICATOR_ROW 1 -#define LCD_MOON_TRACKING_ROW 3 // LCD display row for OPTION_DISPLAY_MOON_TRACKING_CONTINUOUSLY +#define LCD_MOON_TRACKING_ROW 4 // LCD display row for OPTION_DISPLAY_MOON_TRACKING_CONTINUOUSLY #define LCD_MOON_TRACKING_UPDATE_INTERVAL 5000 #define LCD_SUN_TRACKING_ROW 4 // LCD display row for OPTION_DISPLAY_SUN_TRACKING_CONTINUOUSLY #define LCD_SUN_TRACKING_UPDATE_INTERVAL 5000