★この記事は「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)
材料
以下の順番でハンダ付けすると作りやすいです。
- LPC1114
- LPCマイコン LPC1114FN28(DIP28)
- LPCマイコン LPC1114FDH28(TSSOP28)
- この基板は、大きいIC(DIP28)・小さいIC(TSSOP28)のどちらも対応しています。大きいICの方が高価ですがハンダ付けしやすいです。
- 分割ロングピンソケット(細ピン用) 1×40 (40P)
- ピンヘッダ (オスL型) 1×40 (40P)
- 14ピンにカットして使います。
- L型ピンソケット 1×10(10P)
- 基板のパッドは全部で14ピンありますが、10ピンで用は足ります。
- 緑色ドットマトリクスLED 8×8ドット OSL641501-AG
ファームウェア
廣中靖久さんが開発した「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