SHIROのIchigoJam日記

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

LED64Stack

★この記事は「IchigoJam Advent Calendar 2020」にエントリーしています。

8×8のマトリックスLEDを使うIchigoJam用拡張基板です。複数の基板をスタックしてつなげられます。
動画はこちら。


裏面にLPC1114、ピンヘッダ、ピンソケットが付きます。
LPC1114は、大きいIC(DIP28)・小さいIC(TSSOP28)のどちらも対応しています。
ピンヘッダを、IchigoJamのCN3ソケットに差して動かします。

基板データ

*同じ基板を4面割り付けしています。基板10枚発注で40枚できます。
*この基板データは、CC BYライセンスとします。どうぞご利用ください。

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

材料

以下の順番でハンダ付けすると作りやすいです。

ファームウェア

廣中靖久さんが開発した「IchigoDotS」のファームウェアを書きこみします。
https://github.com/yhironaka/IchigoDotS/tree/master/obj
こちらのページにある「IchigoDotS_R3.hex」を書きこみます。
この基板のピンソケットCN3-OUTがIchigoJamのCN3と同じピン配置なので、そこにUSBシリアルをつないで、IchigoJamファーム書き換えと同様に書きこんでください。

基本的には、以下の2種類の命令でLEDマトリックスを表示します。

?"MATLED PUSH n"

n=0-255。2進数で1列分(LED×8個)のデータを送信して表示する。以前に送られたデータは1列ずつスクロールする。基板が複数スタックされている場合は次の基板へスクロールする。

?"MATLED SHOW hhhhhhhhhhhhhhhh"

hは16進数。16進数16桁で、1面分(LED×64個)のデータを送信して表示する。

プログラム

過去にLEDマトリックス用に作ったプログラムを一部流用しています。

IchigoJamロゴ


IchigoJamロゴを流して表示します。基板を複数スタックすると長く表示されます(4個でロゴ全幅表示)。
配列変数にセットする値を変えれば表示文字列が変えられるので、デジタルサイネージ(LED看板)にできます。

10 '*IchigoJam Logo
20 CLV:CLS:?
30 [0]=`01011111
40 [1]=`01000000
50 [2]=`01011100
60 [3]=`01010100
70 [4]=`01000000
80 [5]=`01011111
90 [6]=`01000100
100 [7]=`01011100
110 [8]=`01000000
120 [9]=`01011101
130 [10]=`00000000
140 [11]=`01011100
150 [12]=`01010100
160 [13]=`01111100
170 [14]=`00000000
180 [15]=`01011100
190 [16]=`01010100
200 [17]=`01011100
210 [18]=`01000000
220 [19]=`01010000
230 [20]=`01011111
240 [21]=`01000000
250 [22]=`01011100
260 [23]=`01010100
270 [24]=`01011100
280 [25]=`01010000
290 [26]=`01000100
300 [27]=`01011100
310 [28]=`01000100
320 [29]=`01011100
330 [30]=`01000100
340 [31]=`01011100
350 @LOOP
360 FOR B=0 TO 39
370 ?"MATLED PUSH ";[B]
380 WAIT 10
390 NEXT
400 GOTO @LOOP

かわくだり


一番上のドットが自分のキャラです。左右のカーソルキーで操作して、下から流れてくる岩をよけてください。
岩に当たるとゲームオーバーで、下れた秒数がドット数で表示されます。スペースキーを押すとリプレイします。

10 '*Kawakudari
20 CLV:CLT:CLS:?:X=4
30 @LOOP
40 K=INKEY()
50 X=X-(K=29)+(K=28)
60 X=X&7:[0]=1<<X
70 GSB @MAT
80 WAIT 5
90 IF [0]=[1] GOTO @GEND
100 [8]=1<<RND(8)
110 COPY #802,#804,14
120 GSB @MAT
130 GOTO @LOOP
140 @GEND
150 T=TICK()/60
160 BEEP 30,30
170 WAIT 60
180 FOR I=0 TO 7:[I]=0:NEXT
190 @T
200 IF T>7 [J]=255 ELSE [J]=#FF00>>T
210 T=T-8:J=J+1
220 IF T>0 GOTO @T
230 GSB @MAT
240 IF INKEY()=32 RUN ELSE CONT
250 @MAT
260 ?"MATLED SHOW ";
270 FOR I=0 TO 7
280 ?HEX$([I],2);
290 NEXT:?
300 RTN

連打64


タイトル画面とダウンカウントの後、64個のLEDが点灯するので、スペースキーを連打して全部消してください。
全部消すと、かかった秒数が「○.○」と表示されます。10秒以上かかった場合は、10秒の位がドットで下に表示されます。
スペースキーを押すとリプレイします。

1 '*Renda64
2 CLV:CLS:?
3 ?"MATLED SHOW 00A7F46210F51403":PLAY "L8RGREFG":WAIT 120
4 LET [10],#1F,#11,#1F
5 LET [13],#00,#00,#1F
6 LET [16],#1D,#15,#17
7 LET [19],#15,#15,#1F
8 LET [22],#07,#04,#1F
9 LET [25],#17,#15,#1D
10 LET [28],#1F,#14,#1C
11 LET [31],#01,#01,#1F
12 LET [34],#1F,#15,#1F
13 LET [37],#07,#05,#1F
14 FOR N=3 TO 1 STEP -1:GSB @SET1:GSB @PRTMAT:BEEP 20,10:WAIT 60:NEXT
15 ?"MATLED SHOW FFFFFFFFFFFFFFFF":BEEP 20,30:CLT:P=#FF
16 FOR Y=0 TO 7:P=P<<1:FOR X=0 TO 7
17 IF !BTN(32) && !BTN() CONT
18 BEEP 10,5:?"MATLED PUSH ";P
19 IF BTN(32) || BTN() CONT
20 NEXT:NEXT
21 T=TICK()/6:IF T>899 T=899
22 N=T%100:GSB @SETN
23 [4]=#20
24 N=T/100:IF N>0 FOR B=0 TO N-1:[B]=[B]+#80:NEXT
25 GSB @PRTMAT
26 BEEP 30,60:WAIT 60
27 IF BTN(32) || BTN() RUN ELSE CONT
28 @SETN
29 M=N/10
30 FOR B=0 TO 2:[1+B]=[10+M*3+B]:NEXT
31 @SET1
32 M=N%10
33 FOR B=0 TO 2:[5+B]=[10+M*3+B]:NEXT
34 RTN
35 @PRTMAT
36 ?"MATLED SHOW ";:FOR B=0 TO 7:?HEX$([B],2);:NEXT:?:RTN

イチリス64


落ち物パズルゲームです。上から落ちてくるブロックを、カーソルキーの左右で操作して積んでください。スペースキーを押すとブロックが上下反転します。横1列(LED×8個)が揃うとその列は消えます。
ブロックが上まで積まれてしまうとゲームオーバーで、消した列数がドットで表示されます。スペースキーを押すとリプレイします。

1 CLS:?
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=BTN(28)-BTN(29):IFKGSB17:O=1
6 IFBTN(32)&&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 IF!BTN(32)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