SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

リアル旗上げゲーム

先日作った「旗上げゲーム」
www.ichigojaman.jp
を発展させて、自作の旗コントローラーでプレイしてみました。
動画はこちら。

www.youtube.com

赤・白の旗は、最初は工事用品で探したのですが見つからず、結局スポーツ審判用(柔道・剣道など)の旗を使いました。

まず、チルトスイッチに単芯線2本をはんだ付け。
チャタリング防止に0.1μFのセラミックコンデンサを並列に入れました。(無くてもいいかも?)
f:id:shiro0922:20210423115353j:plain

スイッチにビニールテープを巻いて旗の柄に固定。
中の仕組みが見える方が面白いと思って透明ビニールテープにしましたが、色が着いたビニールテープで隠す手もあると思います。
f:id:shiro0922:20210423140513j:plain

IchigoJamに音声ボード「Ichigo-ice」(イチゴボイス、北の電子工房製)を装着。
f:id:shiro0922:20210423210905p:plain

旗コントローラーからの線は、白旗をIN1・GNDに、赤旗をIN4・GNDに接続します。
f:id:shiro0922:20210423211004p:plain

割と簡単な工作と配線なので、子ども向け工作・プログラミング教室のネタとしても面白そうです。
(プログラムはもっとシンプルにした方がいいかもしれませんが)

プログラム

実行するとすぐにゲームが始まります。指示されたとおりに赤・白の旗を上げ下げしてください。
間違えると「アウト!」と表示されてゲームオーバーになります。IchigoJamのボタンを押すとリプレイします。
1kバイト目一杯なので、スペースを詰めた見づらいリストになっています。

1 @ARUN:'*HataAge
2 CLV:VIDEO3:CLS:W=120
3 POKE#7F0,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
4 POKE#7F8,#FF,#AB,#D5,#AB,#D5,#AB,#D5,#FF
5 LET[0],"シロ","アカ"
6 LET[10],"サゲテ","アゲナイデ","アゲテ","サゲナイデ"
7 LET[20],"si'ro/","a'ka/"
8 LET[30],"sa'gete,","agena'ide,","agete,","sage'naide,"
9 LC7,9:?CHR$(79,31,28,1,31,28,65);
10 GSB28:GSB30:WAITW
11 LC0:?S:LC3,5
12 H=RND(2):?STR$([H]);" ";
13 D=[H+20]:E=LEN(D):COPY#700,D,E:F=E
14 U=RND(2):V=10+U*2+RND(2):?STR$([V]);"   "
15 D=[V+20]:E=LEN(D):COPY#700+F,D,E:F=F+E
16 I=I2CW(46,#700,F)&I2CW(46,13)
17 IFHB=UELSEA=U
18 CLT
19 J=IN(1):K=IN(4)
20 L=!J:R=!K
21 IFLGSB29 ELSEGSB28
22 IFRGSB31 ELSEGSB30
23 IFTICK()<WGOTO19
24 IFA=L&&B=RS=S+1:GOTO11
25 G="a'uto-.":I=I2CW(46,G,LEN(G))&I2CW(46,13)
26 LC16:?"アウト!"
27 IFBTN()RUNELSECONT
28 LC5,8:?CHR$(0,31,0,31,28,28,254,25);:RTN
29 LC5,8:?CHR$(254,31,26,31,28,28,0,0);:RTN
30 LC9,8:?CHR$(0,31,28,28,0,31,28,26,255);:RTN
31 LC9,8:?CHR$(255,31,28,28,25,31,28,0,0);:RTN

動画を見てもわかるのですが、難易度がちょっと低めです。
慣れてきたら、2行目の「W=120」を小さくして、制限時間を短くしてください。

旗上げゲーム

「赤上げて」「白上げて」で有名な旗上げゲームを、IchigoJamのプログラムで作ってみました。
動画はこちら。

www.youtube.com


IchigoJamは白黒しか表示できないので、旗は左側が「白」、右側が「黒」です。(ちょっとわかりづらいかも…)
指示されたら、制限時間(2秒)以内に、左右の矢印キー(←→)を押して、旗を上げ下げしてください。間違えるとゲームオーバーです。
単純なゲームですが、「上げない」「下げない」もあってなかなか難しいです。

サーボモーターでリアルに旗を上げ下げしたり、加速度センサー付きの「旗コントローラー」を持ってプレイしたり、音声ICでしゃべらせたり、工夫次第でいろいろ面白くなりそうです。

プログラム

10 '*HataAge
20 CLV:VIDEO 3:CLS:W=120
30 POKE #780,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
40 POKE #788,#FF,#81,#81,#81,#81,#81,#81,#FF
50 LET [0],"シロ","クロ"
60 LET [10],"サゲテ","アゲナイデ","アゲテ","サゲナイデ"
70 LC 7,9:?CHR$(79,31,28,1,31,28,65);
80 GSB @LD:GSB @RD:WAIT W
90 @LOOP
100 LC 0,0:?S
110 LC 3,5
120 H=RND(2):?STR$([H]);" ";
130 I=RND(2):?STR$([10+I*2+RND(2)]);"   "
140 IF H B=I ELSE A=I
150 CLT:GSB @HMOV
160 IF A=L && B=R BEEP:S=S+1:GOTO @LOOP
170 BEEP 30,30:LC 0,1:END
180 @HMOV
190 K=INKEY()
200 IF K=28 L=!L
210 IF K=29 R=!R
220 IF L GSB @LU ELSE GSB @LD
230 IF R GSB @RU ELSE GSB @RD
240 IF TICK()<W GOTO @HMOV
250 RTN
260 @LD
270 LC 5,8:?CHR$(0,31,0,31,28,28,240,25);:RTN
280 @LU
290 LC 5,8:?CHR$(240,31,26,31,28,28,0,0);:RTN
300 @RD
310 LC 9,8:?CHR$(0,31,28,28,0,31,28,26,241);:RTN
320 @RU
330 LC 9,8:?CHR$(241,31,28,28,25,31,28,0,0);:RTN
  • 20行の「W=120」が制限時間です(現在は2秒)。この値を変えるとゲームの難易度が変わります。
  • 30~40行で、PCGで白旗(文字コード240)・黒旗(文字コード241)を作っています。ここを変えると旗の柄を変更できます。50行の「シロ」「クロ」の文字と共に変えるといいでしょう。

SanadaDake-RV

IchigoJam R互換機のDakeバージョン「SanadaDake-RV」を作りました。

f:id:shiro0922:20210416164955j:plain

LED点灯


LEDセンサー基板を差して点灯確認。
まだRのファームウェアでINポート→OUTポートの切り替えが実装されていないので、8個目のLEDは光らせることができません。
8個のLEDでバーサライターをやりたいので、INポート→OUTポートの切り替えを早く実装して欲しいです。

外付けUSBキーボード

特長として、外付けUSBキーボード端子を付けました。
切り替えスイッチで、IchigoDyhook側キーボード(IN側)/外付けキーボード(OUT側)を切り替えます。

プログラミング教室などで、キーボードデバイスを外付けしてサポートすることを想定しています。
ただし、Dakeの仕様で電源が3.3Vしか供給できないので、3.3Vで動作するキーボードが必要です。
f:id:shiro0922:20210416172242j:plain

使えなかったキーボード

無線接続(USBドングル)のキーボードの方が、消費電力が少なくて案外行けるかもしれません。

バーコードリーダーを接続

IchigoJam Rでも活用した、Symcodeのバーコードリーダーをつないでみました。

メーカー公式ページはこちら。設定マニュアルもダウンロードできます。

f:id:shiro0922:20210416155635j:plain
2.4GHzの無線USBドングルを差すのですが、3.3V電源でも動作して、「かわくだり」のQRコードが無事に読めました(^_^)v
f:id:shiro0922:20210416155430j:plain
プログラミング教室などで、教材プログラムを配布したり、間違ってプログラムを消してしまった子を救済することができます。

なお、最初にバーコードリーダーの設定が必要です。
設定マニュアルのバーコードを読んで設定します。
(一度設定すれば、次回からは設定不要)
f:id:shiro0922:20210416155510j:plain

  • 「Language Settings」を「English」にする
  • 「Capital and Lowcase Switch」で「Capital and Lowcase Switch」を一度読んで、アルファベット読み取りを大文字にする(BASICプログラムの場合)。
    • 「Transfer to Capital Set」を読めばいいように思うのですが、なぜかエラーになって設定できませんでした。
  • SanadaDake-RVの方は「KBD 0」で英語キーボードモードにします。(IchigoDyhookは英語キーボードなので)

基板データ

f:id:shiro0922:20210416163531p:plain
f:id:shiro0922:20210416163515p:plain

*同じ基板を3枚配置しています。
*この基板データは、CC BYライセンスとします。どうぞご利用ください。

(C) 2021 Shiro Saito (https://www.ichigojaman.jp)

材料

かわくだりのQRコード

10 CLS:CLT:X=16
20 X=X-BTN(28)+BTN(29)
30 IF SCR(X,5) ?TICK()/60:END
40 LC X,5:?"O"
50 LC RND(32),23:?"*"
60 WAIT 3
70 GOTO 20