IchigoJamに差して、8×8のLEDマトリックスをスキャン表示する拡張基板を作りました。
IchigoJam Rを想定して作りましたが、IchigoJam Sでも表示できます。
動画はこちら。
www.youtube.com
※2021/9/19 IchigoDakeにも対応して横型の基板に変更
配線の数は多いですが、頑張ればブレッドボードでも組める回路です。
OUT1~OUT8で1行分のドットデータを出力、OUT9~OUT11(IN2~IN4)で8行分のスキャンをしています。
※動画内の説明画像で、OUT1~OUT8のドット配置が上下逆になっていました。すみません。上の画像の配置が正しいです。
スキャン信号は3to8ラインデコーダIC・74HC138を使って、3ビット→8ビットに変換しています。
OUT9~OUT11(入力A~C)の3ビットで0~7を入力すると、出力Y0~Y7の指定した番号だけが0になります。この8ビット出力をLEDマトリックスのカソードにつないで、行方向へスキャンしています。(0を出力したLED列が吸い込み電流で点灯)
※2021/9/19追記
IchigoJam Sのファームウェア1.4.3だと、OUT11(IN4)の動作がおかしく、LEDマトリックスをちゃんとスキャンできません。ファームウェア1.4.2ではちゃんと動きます。
→この問題を修正したファームウェア1.4β29が公開されました。こちらに更新することをお勧めします。
基板データ
※2021/9/19 横型基板に変更
- Fusion PCB用ガーバーデータ(ZIP)[80×79mm]
*同じ基板を2枚配置しています。
*この基板データは、CC BYライセンスとします。どうぞご利用ください。
(C) 2021 Shiro Saito (https://www.ichigojaman.jp)
材料
以下の順番でハンダ付けすると作りやすいです。
- カーボン抵抗(炭素皮膜抵抗) 1/4W51Ω (100本入) R1~R8
- カーボン抵抗(炭素皮膜抵抗) 1/4W2.4kΩ (100本入) R9
- 3to8 ラインデコーダ TC74HC138AP
- 積層セラミックコンデンサー 0.1μF50V X7R 2.54mm (10個入)
- ピンヘッダ 1×40 (40P)
- 緑色ドットマトリクスLED 8×8ドット OSL641501-AG
- LEDの色は好みで替えてもいいですが、緑色が一番明るくて見やすいです。
- 暗記したじき(緑色)
- 文具店や100円ショップなどで売っています。ハサミで切ってLEDマトリックスに接着すると、表示が見やすくなります。LEDを赤にした時は、赤色のしたじきにしてください。
プログラム
LEDマトリックスをスキャン表示すると、ビデオ画面の表示が乱れます。
そのため以下のプログラムでは、最初に「VIDEO 0」で画面表示を止めています。
プログラムを終了した後は、F8キー(VIDEO 1)を押して画面表示を復活させてください。
1文字表示
40行で指定した1文字を、LEDマトリックスにスキャン表示します。
配列変数[0]~[7]に文字のドットデータを展開して(60~80行)、そのデータをスキャンして出力しています(90~140行)。
120行「'WAIT 10」のアポストロフィ(')を外して実行すると、スキャン表示の様子がよくわかります。
10 '*Matrix Chr 20 CLV:VIDEO 0 30 FOR P=1 TO 11:OUT P,0:NEXT 40 C=ASC("A") 50 A=C*8 60 FOR B=0 TO 7 70 [B]=PEEK(A+B) 80 NEXT 90 @LOOP 100 FOR Z=0 TO 7 110 OUT [Z]+256*Z 120 'WAIT 10 130 NEXT 140 GOTO @LOOP
文字列表示
40行で指定した文字列を、1文字0.5秒ずつ順番に表示します。
10 '*Matrix String 20 CLV:VIDEO 0 30 FOR P=1 TO 11:OUT P,0:NEXT 40 S="IchigoJam " 50 @LOOP 60 FOR X=0 TO LEN(S)-1 70 A=PEEK(S+X)*8 80 FOR B=0 TO 7 90 [B]=PEEK(A+B) 100 NEXT 110 CLT 120 @CHR 130 FOR Z=0 TO 7 140 OUT [Z]+256*Z 150 NEXT 160 IF TICK()<30 GOTO @CHR 170 OUT 0 180 NEXT 190 GOTO @LOOP
文字列フロー表示(※2021/9/19追加)
www.youtube.com
40行で指定した文字列を、右から左へ流して表示します。
10 '*Matrix String Flow 20 CLV:VIDEO 0 30 FOR P=1 TO 11:OUT P,0:NEXT 40 S="IchigoJam " 50 @LOOP 60 FOR X=0 TO LEN(S)-1 70 A=PEEK(S+X)*8 80 FOR F=0 TO 7 90 M=128>>F 100 FOR B=0 TO 7 110 D=PEEK(A+B) 120 [B]=([B]<<1)+((D&M)>0) 130 [B]=[B]&255 140 NEXT 150 FOR T=1 TO 10 160 FOR Z=0 TO 7 170 OUT [Z]+256*Z 180 NEXT 190 NEXT 200 NEXT 210 NEXT 220 GOTO @LOOP
連打ゲーム
実行すると「3」「2」「1」とダウンカウントした後、64個のLEDが全て点灯します。
スペースキーを連打して、64個のドットを全部消してください。
全部消すとタイム(秒数)が1文字ずつ画面に表示されます。スペースキーを押すとリプレイします。
10 '*Renda64 20 CLV:VIDEO 0 30 FOR P=1 TO 11:OUT P,0:NEXT 40 FOR N=3 TO 1 STEP -1 50 BEEP:W=60:GSB @PRTN 60 NEXT 70 D=255 80 FOR B=0 TO 7 90 [B]=D 100 NEXT 110 CLT 120 FOR X=0 TO 7 130 D=D>>1 140 FOR Y=0 TO 7 150 GSB @PRTMAT:IF !BTN(32) CONT 160 GSB @PRTMAT:IF BTN(32) CONT 170 [Y]=D 180 NEXT 190 NEXT 200 T=TICK()/6:IF T>999 T=999 210 OUT 0 220 BEEP 10,30:WAIT 30 230 W=60:CLK 240 @TIME 250 IF T>99 N=T/100:GSB @PRTN 260 IF INKEY()=32 RUN 270 N=T%100/10:GSB @PRTN 280 IF INKEY()=32 RUN 290 N=-2:GSB @PRTN 300 IF INKEY()=32 RUN 310 N=T%10:GSB @PRTN 320 IF INKEY()=32 RUN 330 N=-16:GSB @PRTN 340 IF INKEY()=32 RUN 350 GOTO @TIME 360 @PRTN 370 A=(N+48)*8 380 FOR B=0 TO 7 390 [B]=PEEK(A+B) 400 NEXT 410 CLT 420 GSB @PRTMAT:IF TICK()<W CONT 430 RTN 440 @PRTMAT 450 FOR Z=0 TO 7 460 OUT [Z]+256*Z 470 NEXT 480 RTN
かわくだり
自分のキャラ(一番上のドット)をカーソルキーの左右で動かして、下から流れてくる岩をよけてください。
岩に当たるとゲームオーバーで、下った秒数がドットで表示されます。
スペースキーを押すとリプレイします。
10 '*KAWAKUDARI 20 CLV:VIDEO 0:CLT:W=40:X=4 30 FOR P=1 TO 11:OUT P,0:NEXT 40 @LOOP 50 X=X-BTN(29)+BTN(28) 60 X=X&7:Z=1<<X 70 COPY #800,#802,14 80 [7]=1<<RND(8) 90 IF [0]&Z GOTO @GOVER 100 [0]=Z 110 FOR I=1 TO W 120 GSB @PRT 130 NEXT 140 GOTO @LOOP 150 @GOVER 160 T=TICK()/60 170 BEEP 30,30 180 FOR I=1 TO 10*W 190 GSB @PRT 200 NEXT 210 CLK 220 FOR Y=0 TO 7 230 [Y]=0 240 FOR B=0 TO 7 250 S=S+1 260 IF T>=S [Y]=[Y]<<1+1 270 NEXT 280 NEXT 290 GSB @PRT:IF !INKEY() CONT 300 RUN 310 @PRT 320 FOR Y=0 TO 7 330 OUT [Y]+256*Y 340 NEXT 350 RTN
オリジナルのかわくだりはWAITで速さを調節していますが、このプログラムでWAITするとLEDスキャン表示が止まってしまうので、スキャン表示サブルーチンを繰り返し呼んで時間待ちしています(110~130行)。20行の「W=40」でWの値を変えると、全体のスピードが変わります。IchigoJam Sで動かす時は、Wの値を小さくしてください。