先日の先生向け研修で信号機のプログラミングがウケていたので、信号機の拡張ボードを作ってみました。
動かしてみた動画はこちら。
車用信号機(青・黄・赤)と歩行者用信号機(赤・青)、フォトトランジスタ、圧電ブザーを搭載。
あとはプログラム次第です。
基板データ
*この基板ガーバーデータは、CC BYライセンスとします。どうぞご利用ください。
(C) 2018 Shiro Saito (http://d.hatena.ne.jp/shiro0922/)
このファイルをそのままFusion PCBで登録すれば、基板を発注できます。
基板寸法は47×42mmです。
プログラム
セレクタ
- 起動すると、車用信号機が青→黄→赤と順番に点滅します。それぞれプログラム1〜3を表します。
- 起動したいプログラムの所でIchigoJamのボタンを押すと、プログラム1〜3を選択して起動します。
10 '*Selecter 20 CLV 30 OUT 0 40 '@LOOP 50 OUT 1<<N 60 CLT 70 '@INBTN 80 IF BTN() BEEP:WAIT 30:LRUN N+1 90 IF TICK()<60 GOTO 70 100 N=N+1:IF N>2 N=0 110 GOTO 40
信号機プログラム
- 起動すると、車用信号が青、歩行者用信号が赤になります。
- IchigoJamのボタンを押すと、車用が黄→赤になり、歩行者用が青になります。しばらく経つと歩行者用が赤になり、車用が青に戻ります。
- 車用が青の時にフォトトランジスタを暗くすると、車用が黄の点滅信号になります。明るくなると黄→赤になり、元に戻ります。
10 '*TRAFFIC LIGHT 20 OUT 0 30 '*LOOP 40 OUT 1,1 45 OUT 4,1 47 IF ANA(2)<300 THEN GOSUB 400:GOTO 60 50 IF BTN()=0 THEN GOTO 47 52 LED 1 55 WAIT 180 60 OUT 1,0 70 OUT 2,1 80 WAIT 120 90 OUT 2,0 100 OUT 3,1 110 WAIT 120 120 OUT 4,0 130 OUT 5,1 135 LED 0 140 WAIT 300 150 FOR I=1 TO 3 160 OUT 5,1 170 WAIT 30 180 OUT 5,0 190 WAIT 30 200 NEXT 210 OUT 4,1 220 WAIT 120 300 OUT 3,0 310 GOTO 30 400 '*NIGHT 410 OUT 1,0 420 OUT 2,1 430 WAIT 30 440 OUT 2,0 450 WAIT 30 460 IF ANA(2)<300 THEN GOTO 420 470 RETURN
信号機プログラム(メロディ付き)
- 歩行者用信号が青になる時にメロディが流れます。
10 '*TRAFFIC LIGHT MELODY 20 OUT 0 30 '*LOOP 40 OUT 1,1 45 OUT 4,1 47 IF ANA(2)<300 THEN GOSUB 400:GOTO 60 50 IF BTN()=0 THEN GOTO 47 52 LED 1 55 WAIT 180 60 OUT 1,0 70 OUT 2,1 80 WAIT 120 90 OUT 2,0 100 OUT 3,1 110 WAIT 120 120 OUT 4,0 130 OUT 5,1 135 LED 0 137 PLAY "O4L8 E2E4D4E4ED>B2 <F4FFA4FEFEDDE2 FFFF4AFEFEDDE2" 140 WAIT 720 150 FOR I=1 TO 3 160 OUT 5,1 165 PLAY "F4" 170 WAIT 30 180 OUT 5,0 185 PLAY "B4" 190 WAIT 30 200 NEXT 210 OUT 4,1 220 WAIT 120 300 OUT 3,0 310 GOTO 30 400 '*NIGHT 410 OUT 1,0 420 OUT 2,1 430 WAIT 30 440 OUT 2,0 450 WAIT 30 460 IF ANA(2)<300 THEN GOTO 420 470 RETURN
ルーレット
- プログラムを起動してIchigoJamのボタンを押すと、ルーレットが回り、LED1〜5がランダムに点滅します。
- ボタンを押すと、ルーレットがゆっくりになって止まります。ボタンを押すとリプレイします。
10 '*Roulette 20 CLV 30 OUT 0 40 '@START 50 IF !BTN() CONT 60 IF BTN() CONT 70 '@LOOP 80 OUT 0 90 BEEP 10,2 100 L=RND(5)+1 110 OUT L,1 120 WAIT 6 130 IF !BTN() GOTO 70 140 FOR I=1 TO 5 150 OUT 0 160 BEEP 10,2 170 L=RND(5)+1 180 OUT L,1 190 WAIT 20 200 NEXT 210 GOTO 40
プログラム(通信対戦)
以前作ったLEDセンサー基板と同様に、2台をケーブルでつないで通信対戦ができます。
基板右下のGND端子同士を結線、TXとRX端子はクロス(互い違い)で結線します。
じゃんけん
- 2台のIchigoJamの電源を入れて、プログラムを起動します。
- 車用信号のLEDが順番に光ります。青=グー、黄=チョキ、赤=パーを表します。自分が出したい手の所で、IchigoJamのボタンを押します。
- 相手が手を入力するのを待って勝負します。結果は歩行者用信号で表示します。赤=勝ち、青=負け、両方とも点くとあいこです。
- ボタンを押すとリプレイします。
10 '*Janken 20 CLV:CLK:UART 1,1 30 IF BTN() CONT 40 WAIT 30 50 '@INLOOP1 60 J=J+1:IF J>3 J=1 70 OUT 0:OUT J,1 80 CLT 90 '@INLOOP2 100 IF BTN() BEEP:GOTO 120 110 IF TICK()<60 GOTO 90 ELSE GOTO 50 120 '@READY 130 ?"*" 140 K=INKEY() 150 IF K<>42 GOTO 120 160 CLK 170 '@RLOOP 180 ?J 190 K=INKEY() 200 IF K<49 OR K>51 GOTO 170 210 K=K-48 220 CLK 230 ?J 240 WAIT 60 250 '@JUDGE 260 W=5 270 IF J=K W=0 280 IF J=K-1 OR (J=3 AND K=1) W=4 290 IF W>0 OUT W,1 ELSE OUT 4,1:OUT 5,1 300 BEEP 10+(W<>4)*20,30 310 WAIT 30 320 IF !BTN() CONT 330 RUN
スカッシュ
- 2台のIchigoJamの電源を入れて、プログラムを起動します。
- どちらからでもIchigoJamのボタンを押して、ボールをサーブできます。
- レシーブ側では、ボールが車用信号の青→黄→赤、歩行者用信号の赤→青と飛んでくるので、歩行者用の青が点いた時にIchigoJamのボタンを押して打ち返してください。
- ボタンを押すのが早すぎても遅すぎてもミスになり、IchigoJamのLEDが点いて停止します。ミスした方からサーブして再開してください。
10 '*Squash 20 IF BTN()=1 THEN CONT 30 '@RESTART 40 CLV 50 UART 1,1 60 CLK 70 OUT 0 80 W=30 90 '@START 100 IF BTN()=1 THEN GOTO 140 110 K=INKEY() 120 IF K>0 AND K<63 THEN GOTO 180 130 GOTO 90 140 '@GAMELOOP 150 GOSUB 290 160 CLK 170 K=0 180 '@GAMERE 190 IF K=0 OR K>62 THEN K=INKEY():CONT 200 W=K-32 210 K=0 220 GOSUB 370 230 IF M=0 THEN GOTO 140 240 LED 1 250 BEEP 30,60 260 WAIT 60 270 IF BTN()=0 THEN CONT 280 GOTO 30 290 '@SERVE 300 FOR X=5 TO 1 STEP -1 310 OUT X,1 320 WAIT W 330 OUT X,0 340 NEXT 350 PRINT CHR$(W+32) 360 RETURN 370 '@RECEIVE 380 B=0 390 FOR X=1 TO 4 400 OUT X,1 410 WAIT W 420 OUT X,0 430 NEXT 440 IF BTN()=1 THEN GOTO 500 450 OUT 5,1 460 CLT 470 '@WAITLOOP 480 IF BTN()=1 THEN GOTO 540 490 IF TICK()<W THEN GOTO 470 500 '@MISS 510 OUT 5,0 520 M=1 530 RETURN 540 '@STRIKE 550 BEEP 560 OUT 5,0 570 W=W-2 580 RETURN