マトリックスLEDとジョイスティック・ボタンを載せた、IchigoJam用のオリジナルシールド基板です。
プレイ動画はこちら。
【IchigoJam】IchigoLED64
ワンキーゲーム機「IchigoDotS」と同様に、IchigoJamと同じIC・LPC1114をマトリックスLED制御用に使っていて、IchigoJamからシリアル(TX)でコマンドを送っています。
基板は大きいLPC1114にも対応しています。大きいICなら子どもでもはんだ付けできますし、あらかじめファームウェアを焼いておくこともできるので、工作教室のネタにしても面白いと思います。
基板データ
*この基板ガーバーデータは、CC BYライセンスとします。どうぞご利用ください。
(C) 2019 Shiro Saito (https://www.ichigojaman.jp)
材料
以下、全て秋月電子。この順番にはんだ付けすると作りやすいです。
- LPC1114:大きいIC・小さいICのどちらにも対応します。
- シングルピンソケット (低メス) 1×14 (14P)
- タクトスイッチ(黒色)
- アナログジョイスティック
- ピンヘッダ 1×40 (40P)
- 赤色ドットマトリクスLED 8×8ドット OSL641501-ARA
- 赤色は安いのですがあまり明るくないので、予算に余裕があれば、明るくて見やすい緑色をお勧めします。
- 緑色ドットマトリクスLED 8×8ドット OSL641501-AG
ファームウェア
基板のLPC1114に、マトリックスLED表示用のファームウェアを書きこむ必要があります。
上記のサイトからダウンロードして、書庫の中のファイル「MATLED-R1.hex」を、10ピンのピンソケット経由で書きこんでください。
マトリックスLEDを制御する命令のリファレンスも、PDFで入っています。
プログラム
ローダー
起動すると1~3の数字が表示されます。ジョイスティックで数字を変更して、ボタンを押して決定すると、スロット1~3のプログラムを選択起動します。
IchigoJamのスロット0に入れて、自動起動させるといいでしょう。
10 @ARUN:'*Loader64 20 UART 1:CLV:CLS:? 30 OUT 1,-1:OUT 2,-1:OUT 5,-2:OUT 6,-2 40 LET [10],#1F,#11,#1F 50 LET [13],#00,#00,#1F 60 LET [16],#1D,#15,#17 70 LET [19],#15,#15,#1F 80 LET [22],#07,#04,#1F 90 LET [25],#17,#15,#1D 100 LET [28],#1F,#14,#1C 110 LET [31],#01,#01,#1F 120 LET [34],#1F,#15,#1F 130 LET [37],#07,#05,#1F 140 N=1 150 @LOOP 160 I=(ANA(5)-512)/256:J=(512-ANA(6))/256 170 N=N+I+J 180 IF N<1 N=1 190 IF N>3 N=3 200 GSB@PRTN 210 WAIT 10 220 IF !IN(10) && !IN(11) GOTO @LOOP 230 BEEP 240 SRND TICK() 250 LRUN N 260 @PRTN 270 FORX=0TO2:[5+X]=[10+N*3+X]:NEXT 280 ?"MATLED SHOW "; 290 FORB=0TO7:?HEX$([B],2);:NEXT 300 ?:RTN
IchigoJamロゴ
文字表示のサンプルプログラムです。IchigoJamのロゴを流して表示します。
10 '*IchigoJam Logo 20 UART 1:CLV:CLS:? 30 [0]=`01011111 40 [1]=`01000000 50 [2]=`01011100 60 [3]=`01010100 70 [4]=`01010100 80 [5]=`01000000 90 [6]=`01011111 100 [7]=`01000100 110 [8]=`01011100 120 [9]=`01000000 130 [10]=`01011101 140 [11]=`00000000 150 [12]=`01011100 160 [13]=`01010100 170 [14]=`01111100 180 [15]=`00000000 190 [16]=`01011100 200 [17]=`01010100 210 [18]=`01011100 220 [19]=`01000000 230 [20]=`01010000 240 [21]=`01010000 250 [22]=`01011111 260 [23]=`01000000 270 [24]=`01011100 280 [25]=`01010100 290 [26]=`01011100 300 [27]=`01010000 310 [28]=`01000100 320 [29]=`01011100 330 [30]=`01000100 340 [31]=`01011100 350 [32]=`01000100 360 [33]=`01011100 370 @LOOP 380 FOR B=0 TO 41 390 ?"MATLED PUSH ";[B] 400 WAIT 10 410 NEXT 420 GOTO @LOOP
連打ゲーム
「3,2,1」とダウンカウントした後、64個のドットが表示されます。どちらかのボタンを連打して、ドットを全部消してください。
全部消すとタイムが表示されます。10秒以上かかった場合、10の位が左下のドットで表示されます。ボタンを押すとリプレイします。
1 '*Renda64 2 UART 1:CLS:? 3 OUT 5,-2:OUT 6,-2 4 CLV:?"MATLED SHOW 00A7F46210F51403":PLAY "L8RGREFG":WAIT 120 5 LET [10],#1F,#11,#1F 6 LET [13],#00,#00,#1F 7 LET [16],#1D,#15,#17 8 LET [19],#15,#15,#1F 9 LET [22],#07,#04,#1F 10 LET [25],#17,#15,#1D 11 LET [28],#1F,#14,#1C 12 LET [31],#01,#01,#1F 13 LET [34],#1F,#15,#1F 14 LET [37],#07,#05,#1F 15 FOR N=3 TO 1 STEP -1:GSB @SET1:GSB @PRTMAT:BEEP 20,10:WAIT 60:NEXT 16 ?"MATLED SHOW FFFFFFFFFFFFFFFF":BEEP 20,30:CLT:P=#FF 17 FOR Y=0 TO 7:P=P<<1:FOR X=0 TO 7 18 IF IN(10) && IN(11) CONT 19 BEEP 10,5:?"MATLED PUSH ";P 20 IF !IN(10) || !IN(11) CONT 21 NEXT:NEXT 22 T=TICK()/6:IF T>899 T=899 23 N=T%100:GSB @SETN 24 [4]=#20 25 N=T/100:IF N>0 FOR B=0 TO N-1:[B]=[B]+#80:NEXT 26 GSB @PRTMAT 27 BEEP 30,60:WAIT 60 28 IF !IN(10) || !IN(11) RUN ELSE CONT 29 @SETN 30 M=N/10 31 FOR B=0 TO 2:[1+B]=[10+M*3+B]:NEXT 32 @SET1 33 M=N%10 34 FOR B=0 TO 2:[5+B]=[10+M*3+B]:NEXT 35 RTN 36 @PRTMAT 37 ?"MATLED SHOW ";:FOR B=0 TO 7:?HEX$([B],2);:NEXT:?:RTN
落ち物パズルゲーム「イチリス」
プログラムの都合で、基板を横向きにしてプレイしてください。
上から落ちてくるブロックを、ジョイスティックで左右に動かして積んでください。横1列が揃うとその列は消えます。
Bボタン(IN10)を押すと、ブロックの上下反転ができます。
ブロックが上まで積まれてしまうとゲームオーバーです。消せた列数がドットで表示されます。Bボタンを押すとリプレイします。
1 WAIT60:UART1:CLS:?:OUT1,-1:OUT5,-2 2 CLV:?"MATLED SHOW 26CF4244AFA22649":PLAY"L8RGECD":WAIT99:GSB26:W=40 3 M=RND(4):N=RND(3)+1:IF!(M%2+N%2)M=M/2:N=N/2 4 X=3:Y=9:M=M<<X:N=N<<X:W=W-(W>1):GSB22:IFRGOTO12 5 O=0:K=(ANA(6)-512)/300:IFKGSB17:O=1 6 IF!IN(10)&&MGSB20:O=1 7 IFOGOTO5 8 G=G+1:IFG<WELSEG=0:GSB22:IF!RY=Y-1:GSB26 ELSEGOTO10 9 GOTO5 10 BEEP40,5:GSB30:FORZ=Y-1TOY:IF[Z]=#FFGSB25:Z=Z-1 11 NEXT:GOTO3 12 BEEP30,30:GSB30:WAIT99:IFS>64S=64 13 FORY=0TO7:[Y]=0:NEXT:IF!SGOTO15 14 FORB=0TOS-1:Y=B/8:[Y]=[Y]+(1<<(B%8)):NEXT 15 GSB26 16 IFIN(10)CONTELSEGOTO2 17 C=24<<(K*4):IF(M|N)&CRTN 18 D=M<<K:E=N<<K:V=Y:GSB23:IFRRTN 19 X=X+K:M=D:N=E:GSB26:RTN 20 D=N:E=M:V=Y:GSB23:IFRRTN 21 M=D:N=E:GSB26:RTN 22 V=Y-1:D=M:E=N:IFY<2R=1:RTN 23 R=0:IF[V]&D||[V-1]&ER=1 24 RTN 25 [Z]=0:GSB26:S=S+1:BEEP9,9:WAIT30:FORV=ZTO7:[V]=[V+1]:NEXT:[7]=0:GSB26:RTN 26 ?"MATLED SHOW ";:FORB=7TO0STEP-1:C=[B]:IFB=YC=C|M 27 IFB=Y-1C=C|N 28 IFC<16?0; 29 ?HEX$(C);:NEXT:?:RTN 30 [Y-1]=[Y-1]|N:[Y]=[Y]|M:N=0:M=0:RTN