Skip to content
Aaron Turner edited this page Feb 18, 2015 · 1 revision

Sample Basic Code to Read from NGC-MAX

100 '***************************************************************************
110 '** This BASIC program reads and displays encoder positions directly ** 
120 '** from the RS-232C serial port of the JMI NGC-MAX v3.50 or later ** 
130 '** Copyright 1996-2005 by Jim's Mobile Inc. ** 
140 '*************************************************************************** 

150 ENC(1)=4096: 'Defines telescope Azm/RA encoder resolution 
160 ENC(0)=4000: 'Defines telescope Alt/DEC encoder resolution 
170 PORT$="COM1": 'Defines which serial port is connected to the NGC-MAX 

180 CLS:PRINT "Make sure the NGC-MAX is on - then press the SPACE bar." 
190 K$=INKEY$:IF K$="" THEN GOTO 190: 'Waits for user to press a key 

200 IF K$=CHR$(27) THEN GOTO 370: 'If ESC is pressed, jumps to line 370 

210 OPEN PORT$+":9600,N,8,1,RS,CS,DS" AS #3: 'Opens serial port 

220 DEFP$="+00000"+CHR$(9)+"+00000": 'Defines the default position response 
230 P$="":PRINT #3,"Q";: 'Asks NGC-MAX for encoder positions 
240 K$=INKEY$:INPUT #3,P$: 'Reads keyboard/serial port 
250 IF K$ = CHR$(27) THEN GOTO 370: 'If ESC is pressed, jumps to line 370 

260 IF P$="" THEN GOTO 230: 'Waits for input from keyboard or serial port 

270 IF LEN(P$)<8 THEN P$=DEFP$: 'If input not complete, sets to default 
280 AZM$=LEFT$(P$,6): 'Extracts the Azimuth/R.A. encoder position 
290 ALT$=MID$(P$,8,6): 'Extracts the Altitude/Dec. encoder position 
300 A=-VAL(AZM$):GOSUB 400: 'Jumps to line 400 to interpret Azimuth angle 

310 RA$=A$: 'Sets variable RA$ equal to the Azimuth angle 
320 A=VAL(ALT$):GOSUB 400: 'Jumps to line 400 to interpret Altitude angle 

330 DEC$=A$: 'Sets variable DEC$ equal to the Altitude angle 
340 LOCATE 10,19:PRINT "Azm/R.A.= ";RA$: 'Displays the Azimuth/R.A. angle 
350 LOCATE 10,46:PRINT "Alt/DEC.= ";DEC$: 'Displays the Altitude/Dec. angle 
360 GOTO 230: 'Goes back to line 230 to check positions again 

370 CLOSE #3:LOCATE 20:PRINT "Exiting program.": 'Closes the serial port 

380 SYSTEM: 'and EXITS the program 

390 '*** This subroutine changes the raw encoder data into angular form. *** 
400 AX=(AX=0): 'Toggles variable AX to indicate which axis 
410 A=A*360/ENC(-AX): 'Changes raw encoder tic value to an angle 
420 IF A>359 THEN A=A-360:GOTO 420: 'Makes sure angle is less than 360 
430 IF A<-359 THEN A=A+360:GOTO 430: 'Makes sure angle is greater than -360 

440 IF NOT AX AND A>180 THEN A=A-360: 'Makes sure Altitude is within -180 to 180 
450 IF A<0 AND AX THEN A=360+A: 'Makes sure Azimuth is greater than zero 
460 A=A+.0051:A=INT(A*10000)/10000: 'Puts angle in a 2 decimal place format 
470 S=SGN(A):A$="000"+MID$(STR$(A),2): 'Temporarily adds leading zeros 
480 A=0:FOR X=1 TO LEN(A$): 'Starts looking for decimal place in angle 
490 IF MID$(A$,X,1)="." THEN A=X: 'When decimal found, marks with variable A 
500 NEXT X:IF A=0 THEN A$=A$+".0":A=LEN(A$)-2: 'Adds decimal value if absent 
510 A$=MID$(A$,A-3,6): 'Extracts the angle in proper format 
520 IF LEN(A$)<6 THEN A$=A$+"0": 'Makes sure second decimal place is present 
530 S$="+":IF S<0 THEN S$="-": 'Sets the sign as plus or minus for angle 
540 IF NOT AX THEN A$ = S$ + A$: 'Adds sign to the Altitude angle only 
550 RETURN: 'Returns the program to line 310 or 330
Clone this wiki locally