W章で利用したプログラム
'-------------------------------------------------
' 円運動の加速度測定
'-------------------------------------------------
'
DECLARE SUB INITIALIZE ()
DECLARE SUB GRAPH ()
DECLARE FUNCTION END.FLAG ()
DECLARE SUB GRAPH2 ()
DECLARE SUB END.PROGRAM ()
CONST ZERO.HEX = 128, XO.T = 6, YO.T = 18, X.TIME = 1, X.VOLT = 57
CONST M.MAX = 70, X.LEN = M.MAX, Y.LEN = 14, END.TIME = 300
CONST SAMPLING.TIME = 8, LINE.COLOR = 1
DIM SHARED XV(0 TO 301), YV(0 TO 301), YA(0 TO 301)
CALL INITIALIZE
CLS
COLOR 7
LOCATE 6, 16: PRINT "==============================================="
COLOR 6
LOCATE 7, 16: PRINT " 遠心力(の加速度)と回転数を測定します"
COLOR 7
LOCATE 8, 16: PRINT "==============================================="
COLOR 7
LOCATE 12, 16: PRINT " INPUT1 SW1:STD SW2:MONO 回転数( 1 Hz/V)"
LOCATE 14, 16: PRINT " INPUT2 SW3:STD SW4:MONO 傾 き(10 °/V)"
BEEP: COLOR 23
LOCATE 23, 16: PRINT "準備ができましたら,リターンキーを押して下さい"
COLOR 7
DO
IK$ = INKEY$
LOOP WHILE IK$ = ""
START:
SOKUTEI:
BEEP
CALL GRAPH
T = 0
LOCATE 2, X.TIME + 1: PRINT "開始の時刻="; : PRINT LEFT$(TIME$, SAMPLING.TIME)
FOR I = 0 TO 301
XV(I) = 0: YV(I) = 0
NEXT
DO
BEEP
IK$ = INKEY$
IF IK$ = "" THEN
GOTO LAST.IF
END IF
IK = ASC(IK$)
IF IK = &H52 OR IK = &H72 OR IK = &HBD THEN
GOTO SOKUTEI
ELSEIF IK = &H53 OR IK = &H73 OR IK = &HC4 THEN
GOTO SOUKAN
ELSEIF IK = &H45 OR IK = &H65 OR IK = &HB2 THEN
GOTO SYURYOU
END IF
LAST.IF:
LOCATE 3, X.TIME + 1: PRINT "現在時刻 =";
TIME0$ = MID$(TIME$, SAMPLING.TIME, 1)
COLOR 2: PRINT LEFT$(TIME$, SAMPLING.TIME): COLOR 7
PRINT #1, "b";
ADUMMY$ = INPUT$(1, #1)
PRINT #1, "i";
LINE INPUT #1, AD$: AVT = VAL(AD$): ADUMMY$ = INPUT$(1, #1)
AVT = AVT / 256 * 5
XV(T) = AVT
COLOR 2: LOCATE 2, X.VOLT + 12: PRINT USING "##.##"; AVT: COLOR 2
CIRCLE ( XO + 8 * T / 6, YO - 48 * AVT), 1, 2
PAINT (XO + 8 * T / 6, YO - 48 * AVT), 2
PRINT #1, "a";
BDUMMY$ = INPUT$(1, #1)
PRINT #1, "i";
LINE INPUT #1, BD$: BVT = VAL(BD$): BDUMMY$ = INPUT$(1, #1)
BVT = BVT / 256 * 100
YV(T) = BVT
COLOR 3: LOCATE 3, X.VOLT + 12: PRINT USING "##.##"; BVT: COLOR 3
CIRCLE ( XO + 8 * T / 6, YO - 2.4 * BVT), 1, 3
'PAINT (XO + 8 * T / 6, YO - 2.4 * BVT), 3
DO
LOOP WHILE MID$(TIME$, SAMPLING.TIME, 1) = TIME0$
T = T + 1
IF T > END.TIME THEN
GOTO MENU
END IF
LOOP WHILE 1
MENU:
DO
BEEP
IK$ = INKEY$
LOOP WHILE IK$ = ""
IK = ASC(IK$)
IF IK = &H52 OR IK = &H72 OR IK = &HBD THEN
GOTO SOKUTEI
ELSEIF IK = &H53 OR IK = &H73 OR IK = &HC4 THEN
GOTO SOUKAN
ELSEIF IK = &H45 OR IK = &H65 OR IK = &HB2 THEN
GOTO SYURYOU
END IF
SOUKAN:
CALL GRAPH2
COLOR 6: LOCATE 22, 67: PRINT "R"; : COLOR 7: PRINT ":再測定"
COLOR 6: LOCATE 24, 67: PRINT "E"; : COLOR 7: PRINT ":終 了"
DO
IK$ = INKEY$
LOOP WHILE IK$ = ""
IK = ASC(IK$)
IF IK = &H52 OR IK = &H72 OR IK = &HBD THEN
GOTO SOKUTEI
ELSEIF IK = &H45 OR IK = &H65 OR IK = &HB2 THEN
GOTO SYURYOU
END IF
SYURYOU:
CALL END.PROGRAM
END
FUNCTION END.FLAG
LOCATE 24, 59: COLOR 18: PRINT "R"
LOCATE 24, 73: COLOR 18: PRINT "E"
COLOR 7
DO
DO
BEEP
IK$ = INKEY$
LOOP WHILE IK$ = ""
IK = ASC(IK$)
IF IK = &H53 OR IK = &H73 OR IK = &HC4 THEN
END.FLAG = 2
ELSEIF IK = &H52 OR IK = &H72 OR IK = &HBD THEN
END.FLAG = 1
EXIT DO
ELSEIF IK = &H45 OR IK = &H65 OR IK = &HB2 THEN
END.FLAG = 0
EXIT DO
END IF
IK$ = ""
LOOP WHILE IK$ = ""
END FUNCTION
SUB END.PROGRAM
BEEP: CLS
PRINT #1, "d"; : PRINT #1, STR$(&H80)
CLOSE #1
END SUB
SUB GRAPH
SHARED XO, YO
CLS
XO = 131: YO = 296
TITLE$ = "min"
LINE (XO, YO)-(XO + 5 * 80, YO - 5 * 48), LINE.COLOR, B
FOR I = 1 TO 9
LINE (XO, YO - 24 * I)-(XO + 5 * 80, YO - 24 * I), LINE.COLOR, , &H8888
NEXT
FOR I = 1 TO 4
LINE (XO + 80 * I, YO)-(XO + 80 * I, YO - 5 * 48), LINE.COLOR, , &H8888
NEXT
COLOR 7
LOCATE 1, 29: PRINT "回転数と傾きの時間変化"
COLOR 2
LOCATE 5, 3: PRINT "回転数"
LOCATE 6, 3: PRINT "(Hz)"
FOR I = 1 TO 4
LOCATE 19 - 3 * I, 5: PRINT USING "#.#"; I
NEXT
COLOR 3
LOCATE 5, 11: PRINT "傾 き"
LOCATE 6, 11: PRINT "(°)"
FOR I = 1 TO 4
LOCATE 19 - 3 * I, 13: PRINT USING "##"; 20 * I
NEXT
COLOR 7
FOR I = 0 TO 5
LOCATE 20, 17 + 10 * I: PRINT USING "#"; I
NEXT
LOCATE 22, 34: PRINT "経過時間 [ "; TITLE$; " ]"
COLOR 7
LOCATE 2, 60: PRINT "回転数 = Hz"
LOCATE 3, 60: PRINT "傾 き = °"
COLOR 7: LOCATE 24, 30: PRINT "相関グラフ "; : COLOR 2: PRINT "S";
COLOR 7: PRINT "oukan 再実行 "; : COLOR 2: PRINT "R";
COLOR 7: PRINT "etry 終了 "; : COLOR 2: PRINT "E"; : COLOR 7: PRINT "nd"
COLOR 7
END SUB
SUB GRAPH2
SHARED X1, Y1
X1 = 131: Y1 = 344
CLS
LINE (X1, Y1)-(X1 + 20 * 16, Y1 - 20 * 16), LINE.COLOR, B
FOR I = 1 TO 19
LINE (X1, Y1 - 16* I)-(X1 + 20 * 16, Y1 - 16 * I), LINE.COLOR, , &H8888
NEXT
FOR I = 1 TO 19
LINE (X1 + 16 * I, Y1)-(X1 + 16 * I, Y1 - 20 * 16), LINE.COLOR, , &H8888
NEXT
COLOR 7
LOCATE 1, 21: PRINT "円運動と回転数と加速度の関係"
LOCATE 5, 9: PRINT "加"
LOCATE 8, 9: PRINT "速"
LOCATE 11, 9: PRINT "度"
LOCATE 14, 7: PRINT "(m/s )"
LOCATE 24, 26: PRINT "回 転 数 (Hz)"
FOR I = 1 TO 4
LOCATE 22 - 5 * I, 15: PRINT USING "##"; 5 * I
NEXT
FOR I = 1 TO 4
LOCATE 23, 16 + 10 * I: PRINT USING "#.#"; 5 * I
NEXT
FOR I = 0 TO 300
YA(I) = 9.8 *TAN(YV(I) * 3.1416 / 180)
CIRCLE (X1 + 160 * XV(I), Y1 - 16 * YA(I)), 3, 4
PAINT (X1 + 160 * XV(I), Y1 - 16 * YA(I)), 4
NEXT
END SUB
SUB INITIALIZE
CLS
VIEW PRINT 1 TO 25
OPEN "COM1:9600,N,8,1,ASC" FOR RANDOM AS #1
END SUB
|