100 REM PROGRAM 'DMMNOON.BAS' PLOTS AND SAVES 96 MIN. OF RADIOTELESCOPE SIGNALS 110 REM BY INTEGRATING EVERY 10 SECONDS (@ 3/SEC) FOR 96 MIN. (VERSION 8). 120 REM THIS VERSION STARTS SAVING DATA AT 11:00:00 - START RUNNING AT 130 REM 10:XX AM., AND HAS TIME LOOPS OPTIMIZED FOR A PENTIUM-S @ 75MHZ. 140 REM BY R. B. MINTON FOR IBM/IBM CLONE IN GW BASIC, 2 NOVEMBER 2000. 150 DEF FNA(X)=INT(X*100+.5)/100: REM ROUND TO 2 DECIMAL POINTS 160 LAT=36.907: REM OBSERVER'S LATITUDE, DEG. 170 DCSUN=-0!: REM GET SOLAR DECLINATION 180 SDEC=DCSUN: SD$="02 NOV 2000": REM SOLAR DECLINATION & DATE 190 SEL=180-(LAT+90-SDEC): REM SOLAR ELEVATION, DEG. 200 PEL=SEL+1.25: REM ELEVATION TO SET ON PROTRACTOR 210 CLS 220 LOCATE 5,15: PRINT"SOLAR RA & DEC (H,M,S) : ";DAT$ 230 LOCATE 7,15: PRINT"RA OF SUN (DEG) : ";RASUN 240 LOCATE 9,15: PRINT"DEC OF SUN (DEG) : ";DCSUN 250 LOCATE 11,15: PRINT"DATE OF SOLAR ELEVATION: ";SD$ 260 LOCATE 13,15: PRINT"SOLAR ELEVATION (DEG) : ";SEL 270 LOCATE 15,15: PRINT"PROTRACTOR ELEVATION : ";PEL 280 FOR I=1 TO 234567!: NEXT I 290 ON ERROR GOTO 310 300 KILL "A:OUT.DAT" 310 REM CONTINUE 320 FIL$="A:OUT.DAT": REM OUTUT FILENAME 330 WIDTH LPRINT 80: SCREEN 0: KEY OFF: CLS 340 OPEN "COM1: 1200,N,7,2,RS,CS,DS,CD" AS #2 350 PRINT #2, "D" 360 VA=VAL(MID$(INPUT$(14,#2),4,6)) 370 YAM=.31673: REM Y-AXIS MULTIPLIER FOR 30 DB AMPS. 380 YOF=100: REM Y-AXIS OFFSET (DC OFFSET) 390 PRINT #2, "D" 400 UN$=RIGHT$(INPUT$(14,#2),4): REM UNITS BEING USED ON METER 410 UN$=" mV" 420 NSAM=17280: REM # SAMPLES (96MIN X 60 SEC/MIN X 3 SAM/SEC) 430 OPEN FIL$ FOR APPEND AS 3: REM OPEN OUTPUT FILE 440 WRITE #3,"START",DATE$,TIME$,UN$ 450 T1$="96 Min. Plot of 3.7 to 4.2 GHz Radiotelescope Signal Voltage Levels" 460 HSP=640-1: VSP=200-1: REM MAXIMUM SCREEN VALUES 470 REM CONTINUE 480 CLS: SCREEN 2: REM SET-UP SCREEN 490 VIEW SCREEN (0,0)-(HSP,VSP): REM DEFINE ACTIVE DRAWING AREA 500 TB=17: BB=40: LB=6: RB=57: REM SIZE OF EACH (4) BORDERS 510 NHP=HSP-(LB+RB): NVP=VSP-(TB+BB): REM # AVAIL HORZ/VERT PIXELS 520 LINE (LB,TB)-(HSP-RB,VSP-BB),,B: REM BOX AROUND NEW BORDERS 530 REM --------------------------------- 540 REM DRAW X/Y AXIS LABEL AND TIC MARKS 550 REM --------------------------------- 560 TA$="U146 R60 D146": REM MAJOR VERTICAL TIC STRING 570 DRAW "BM 6,163": REM MOVE TO BOTTOM POSITION 580 FOR I=0 TO 8: REM DRAW TICS 590 DRAW "TA 0;XTA$;": REM TURN ANGLE & TIC 600 NEXT I 610 TB$="U144 R12 D144": REM MINOR VERTICAL TIC STRING 620 DRAW "BM 6,161": REM MOVE TO BOTTOM POSITION 630 FOR I=0 TO 47: REM DRAW TICS 640 DRAW "TA 0;XTB$;": REM TURN ANGLE & TIC 650 NEXT I 660 GOTO 720 670 TC$="R576 U16 L576": REM MAJOR HORIZONTAL TIC STRING 680 DRAW "BM 6,159": REM MOVE TO BOTTOM POSITION 690 FOR I=0 TO 8: REM DRAW TICS 700 DRAW "TA 0;XTC$;": REM TURN ANGLE & TIC 710 NEXT I 720 REM CONTINUE 730 HO$=" " 740 FOR I=2 TO 16 STEP 2: REM PRINT BLANK LINES AS GRIDS 750 LOCATE I+2,1: PRINT HO$ 760 NEXT I 770 FOR I=0 TO 3: REM DRAW I TIMES 780 LOCATE 22,1+(I*15): REM LOCATE CURSOR FOR TIC # 790 TICNO=I*20: REM COMPUTE TIC # 800 DA$=STR$(TICNO): REM MAKE IT A STRING 810 DA$=RIGHT$(DA$,2): REM USE RIGHT 2 DIGITS 820 PRINT DA$ 830 NEXT I 840 LOCATE 3,76: PRINT UN$ 850 LOCATE 22,49: PRINT"Min." 860 FOR I=2 TO 18 STEP 2: REM PRINT Y-AXIS LABEL 870 LOCATE (2+I),74 880 V$=STR$(((100/2)*(9!-(I/2)))+YOF) 890 PRINT"_"+V$ 900 NEXT I 910 LOCATE 1,4: PRINT T1$: REM LABEL 1 FOR TOP OF GRAPH 920 LOCATE 2,4: PRINT T2$: REM LABEL 2 FOR TOP OF GRAPH 930 MRK=0: HPIX=HSP-LB-RB: REM HPIX=SCREEN WIDTH, PIXELS 940 WP=HPIX/NSAM: MPV=VSP-BB: REM WIDTH OF 1 PIXEL, MIN. PERMITTED VALUE 950 SIG=0: FLG=0: TEMP=0: K=0: M=0: N=0: CNT=0: SMAX=-9999 960 REM CONTINUE 970 FOR I=1 TO 45000!: NEXT I: BEEP 980 IF LEFT$(TIME$,2)<"11" THEN GOTO 970 990 IF RIGHT$(TIME$,2)<>"00" THEN GOTO 960 1000 REM CONTINUE 1010 BEEP 1020 FOR I=0 TO NSAM: REM LOOP FOR # OF SAMPLES 1030 K=K+1: N=N+1: CNT=CNT+1 1040 IF I>0 THEN GOTO 1090 1050 LOCATE 23,2:PRINT" " 1060 LOCATE 23,2:PRINT"0 Min. = ";TIME$;" MST/MDT ON ";DATE$ 1070 LOCATE 23,45:PRINT" " 1080 LOCATE 23,45:PRINT"Object = Sun at Noon Transit " 1090 REM CONTINUE 1100 J=INT(I*WP): REM WIDTH OF 1 PIXEL FOR 1 DATA POINT 1110 PRINT #2, "D": REM TELL METER READY FOR DATA OUTPUT 1120 SIG=VAL(MID$(INPUT$(14,#2),4,6)): REM GET DATA FROM METER 1130 SIG=SIG*1000: REM WAS VOLTS, NOW IN MV 1140 FOR K=1 TO 500: NEXT K: REM SMALL DELAY 1150 REM SIG=FNA(SIG+(20*(RND(103)))): REM TEST SIGNAL FOR DEBUGING 1160 IF SIG>SMAX THEN FLG=1: SMAX=SIG: TMAX$=TIME$: REM SAVE SIGNAL MAX. 1170 IF CNT<3 THEN GOTO 1220: REM SHOW TIME EVERY 1 SECOND 1180 CNT=0: REM HAVE WHOLE SECOND, RESET COUNT 1190 LOCATE 2,2: PRINT"Current Signal/Time: " 1200 LOCATE 2,22: PRINT USING "####.##";VMS 1210 LOCATE 2,29: PRINT" @ "+TIME$ 1220 REM CONTINUE COUNT IS 1 OR 2 1230 TEMP=TEMP+SIG: REM SUM THE SIGNAL (AS TEMP) 1240 IF N<30 THEN GOTO 1380: REM DO NOT PLOT (STILL INTEGRATING) 1250 TEMP=TEMP/N: VMS=FNA(TEMP): REM AVERAGE 30 DATA POINTS (10 SEC) 1260 WRITE #3,DATE$,TIME$,VMS: REM WRITE TIME & DATA TO DISK 1270 TEMP=0: N=0: BEEP: REM RESET SUM & INTEGRATE COUNTERS 1280 YYY=VSP-((VMS-YOF)*YAM)-BB: REM Y-AXIS VALUE FOR GRAPH 1290 REM IF YYY>MPV THEN YYY=MPV: REM TRUNCATE IF OFF-SCALE (BOTTOM) 1300 REM IF YYY<(TB+40) THEN YYY=TB: REM TRUNCATE IF OFF-SCALE (TOP) 1310 XXX=LB+J: REM X-VALUE FOR GRAPH 1320 IF MRK=0 THEN MRK=1: CIRCLE (XXX,YYY),0: REM DRAW A DOT FIRST 1330 LINE -(XXX,YYY): REM THEN CONNECT WITH LINES 1340 IF FLG=0 THEN GOTO 1380: REM HAVE A NEW MAXIMUM - PRINT IT 1350 FLG=0: LOCATE 2,43:PRINT"Maximum S/T: " 1360 LOCATE 2,55:PRINT USING "####.##";SMAX 1370 LOCATE 2,62:PRINT" @ "+TMAX$ 1380 REM CONTINUE 1390 NEXT I 1400 CLOSE #2: CLOSE #3: REM CLOSE METER, 'OUT.DAT' 1410 GOTO 310 1420 END