HOPE-2020自動運転プログラム完成
HOPE-2020
2020/04/01
概要
線路を6つつなげて、ホール素子ICを利用したセンサを4つセットしました。
そして、真ん中の2つのセンサーの前を列車が通った時に踏切が下がるようにしました。
駅も設置しました。
名前は、Grand Central Terminalです。
また、Grand Central Terminalに自動で止まってくれる手動制御装置を作りました。
手動制御+ホールICセンサーによる自動制御のプログラム
- 線路の端で折り返し運転(ホールIC)
- 手動制御で駅に停車(手動制御回路基板)
- 手動制御で出発(手動制御回路基板)
- 踏切侵入の時のバーの上げ下げ(開閉)
- 電車の発車前の音楽として、「上海アリス幻樂団」様のゲーム「東方紅魔郷」より「おてんば恋娘」をお借りしました。
最終的な自動運転のプログラム
プログラム公開は途中までしかしていません。
行番号800以降に駅を発車するときに流す発車音楽のデータをBEEPコマンドを使って書いています。
これを公開すると著作権法違反になるそうなので、削除しました。
僕は、ZUNさんの「おてんば恋娘」を発車メロディーにしました。
完成したプログラム
例によってプログラムはコピペしても大丈夫なようにしてあります。
10 ON ERROR GOTO 430
20 OUT $E3,$82:CLS
30 F%=0
40 T%=0:GOTO 70
50 F%=0
60 T%=1
70 M%=0
80 SS%=0
90 GSS%=0
100 WG%=0
110 PS%=0
120 D%=0
130 OUT $E2,4
140 OUT $E0,254
150 M%=IN($E1)
160 IF M%=143 THEN OUT $E2,4:T%=1:F%=0:GOSUB 330:WG%=0:GSS%=1:PS%=0
170 IF M%=143 THEN IF SS%=1 THEN OUT $E0,0:GOTO 380:PS%=0
180 '7
190 IF M%=47 THEN IF T%=1 THEN OUT $E2,0:GSS%=0:PS%=0 ELSE OUT $E2,7
200 IF M%=39 THEN IF T%=1 THEN OUT $E2,0:GSS%=0:PS%=0 ELSE OUT $E2,7:SS%=1
210 '5
220 IF M%=31 THEN IF F%=1 THEN OUT $E2,3:GSS%=0 ELSE OUT $E2,4:PS%=0
230 IF M%=23 THEN IF F%=1 THEN OUT $E2,3:GSS%=0 ELSE OUT $E2,4:SS%=1:PS%=0
240 '4
250 IF M%=79 THEN OUT $E2,7:T%=0:F%=1:GSS%=0:GOSUB 350:PS%=1
260 IF M%=71 THEN OUT $E2,7:T%=0:F%=1:SS%=1:GSS%=0:GOSUB 350:PS%=1
270 '6
280 IF M%=7 THEN SS%=1:IF WG%=0 THEN GOSUB 370
290 '3
300 IF M%=135 THEN OUT $E0,0:GOTO 380
310 '7+3
320 GOTO 150
330 IF GSS%=0 THEN PRINT "GRAND-CENTRAL-STATION.",TIME$
340 RETURN
350 IF PS%=0 THEN PRINT "PENNSYLVANIA-STATION.",TIME$
360 RETURN
370 PRINT "WE WILL STOP AT GRAND-CENTRAL-STATION.":WG%=1:RETURN
380 PRINT "WE STOP AT GRAND-CENTRAL-STATION.",TIME$
390 PRINT "(RESTART? Y--RIGHT N--LEFT & RIGHTH)"
400 D%=IN($E1):T%=1:F%=0
410 IF D%=11 THEN PRINT "YES":GOSUB 800:GOTO 50
420 IF D%=3 THEN PRINT "NO":CLS :GOTO 480:GOTO 620
430 IF ERL=230 THEN IF ERR=26 GOTO 460 ELSE GOTO 450
440 GOTO 400
450 PRINT "ERROR!!","LIST",ERL,"NUMBER",ERR:GOTO 610
460 PRINT " ":PRINT "PLEASE WRITE SOMETHING!!":GOTO 380
470 FOR XX=1 TO 10:PRINT :NEXT XX
480 PRINT :FOR YY=1 TO 40 STEP 1
490 PRINT SPACE$(YY);" _______ "
500 PRINT SPACE$(YY);" | || || | _______ "
510 PRINT SPACE$(YY);" ___JJ_LL____/_______L______ "
520 PRINT SPACE$(YY);"|___________________________| "
530 PRINT SPACE$(YY);"| _____ _____ _____ | "
540 PRINT SPACE$(YY);"| |__|__| |__|__| | | | | "
550 PRINT SPACE$(YY);"| | | | |__|__| |__|__| | "
560 PRINT SPACE$(YY);"| |__|__| |__|__| |)"
570 PRINT SPACE$(YY);"|___________________________| "
580 PRINT SPACE$(YY);" L__/ L__/ ":PRINT :PRINT :CLS
590 IF YY=30 THEN GOTO 620
600 NEXT YY
610 STOP
620 PRINT " GGGGG OOOOO OOOOO DDDDDDD"
630 PRINT " GG GG OO OO OO OO DD DD"
640 PRINT "GG OO OO OO OO DD DD"
650 PRINT "GG GGGGG OO OO OO OO DD DD"
660 PRINT " GG GG OO OO OO OO DD DD"
670 PRINT " GGGGG OOOOO OOOOO DDDDDDD"
680 PRINT " "
690 PRINT "BBBBBBB YY YY EEEEEEE "
700 PRINT "BB BB YY YY EE "
710 PRINT "BB BB YYYY EE "
720 PRINT "BBBBBBB YY EEEEEEE "
730 PRINT "BB BB YY EE "
740 PRINT "BB BB YY EE "
750 PRINT "BBBBBBB YY EEEEEEE "
760 FOR B%=1 TO 32767 STEP 1
770 NEXT B%
780 CLS
790 GOTO 50
800 '以下音楽再生プログラム
1340 RETURN
変数説明
F%,T% = 列車が線路の両端で折り返すとき用のフラグ
M% = ホール素子ICによって入力される信号の数値用の変数
プログラム解説
10 エラーがあったら430行目に移動
20 AポートとCポートを出力、Bポートを入力に設定
30~40 線路の両端で折り返すためのフラグを作成して70行目に移動
50~60 列車を停車させて走り出すときに誤作動しないためのフラグを設定
70 ホール素子ICによって入力される信号の数値用の変数を設定