SHIROのIchigoJam日記

IchigoJamの電子工作とプログラミングをメインに

通信対戦スカッシュ

IchigoJamに載せるシールド基板「8LED Sensor Shield」を現在試作中です。
通信用のTX/RX/GND端子を搭載した基板ができたので、2台のIchigoJamで通信対戦するスカッシュゲームを作ってみました。
プレイ動画はこちら。


2台のIchigoJamを通信ケーブルで接続。


通信ケーブルは0.65mm径の単芯線を使います。
黒・白・緑の3本をより合わせました。


黒のケーブルで2台のGND同士を接続。
TX/RXは白と緑のケーブルでクロス接続します。


携帯できるように、裏側に単4×3本の電池ボックスを装着。
CN5端子(5V/GND)の裏側に配線します。

プログラムリスト

※ボールの加速を大きくして、早く勝負が着くように変更しました。

10 '*Squash
20 IF BTN()=1 THEN CONT
30 '@RESTART
40 CLV
50 UART 1,1
60 CLK
70 OUT 8,0
80 W=30
90 '@START
100 IF BTN()=1 THEN GOTO 140
110 K=INKEY()
120 IF K>0 AND K<255 THEN GOTO 180
130 GOTO 90
140 '@GAMELOOP
150 GOSUB 290
160 CLK
170 K=0
180 '@GAMERE
190 IF K=0 THEN K=INKEY():CONT
200 W=K-32
210 K=0
220 GOSUB 370
230 IF M=0 THEN GOTO 140
240 OUT 8,1
250 BEEP 30,60
260 WAIT 60
270 IF BTN()=0 THEN CONT
280 GOTO 30
290 '@SERVE
300 FOR X=6 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 6
400 OUT X,1
410 WAIT W
420 OUT X,0
430 NEXT
440 IF BTN()=1 THEN GOTO 500
450 OUT 7,1
460 CLT
470 '@WAITLOOP
480 IF BTN()=1 THEN GOTO 540
490 IF TICK()<W THEN GOTO 470
500 '@MISS
510 OUT 7,0
520 M=1
530 RETURN
540 '@STRIKE
550 BEEP
560 OUT 7,0
570 W=W-2
580 RETURN

やっていることは単純で、ボールの速度(WAITの数)を1文字(1バイトの文字コード)で互いに送受信しているだけです。
そのままの値(0〜30)だとコントロールコード領域になってしまい、IchigoJamがおかしな動作をするので、送信側は32を加えた値を出力して、受信側は32を引いて受け取っています。

新しい学習指導要領で、「2020年から小学校でプログラミング必修」が大きな話題になっていますが、実は2021年から施行される中学校でも、技術科の単元「計測と制御」でのプログラミングが拡充され、「ネットワークを利用したプログラミング」をやらなければならないことになっています。
先日視察した「教育ITソリューションExpo」でも、ロボット2台をケーブルでつないでネットワークプログラミングをする教材が展示されていました。
それを見て「IchigoJamでも簡単にネットワークプログラミングできないか?」と考えて、これを作ってみました。
本当はMixJuiceやIchigoSodaとサーバープログラムを使って、インターネットを介した通信をすると今時っぽいのですが、それはまた別の機会に。