福野泰介の一日一創 - create every day

IchigoJamカラフル電光掲示板のつくりかた

2018/02/14
#IchigoJam #maker 

CC BYで、公開しているIchigoJamのロゴ
WS2812B 32x8のフルカラーLEDを使って、表示してみました。

つくりかた
まずは、画面づくり。色ごとに数値を使って、IchigoJamロゴを描きます。

2 [0]="0 2 3 6 " 3 [1]="0 2 6 " 4 [2]="0 111 222 3 444 555 6 777 888888 " 5 [3]="0 1 2 2 3 4 4 5 5 6 7 7 8 8 8 " 6 [4]="0 111 2 2 3 444 555 666 7777 8 8 8 " 7 [5]=" 4 " 8 [6]="99999999999 444 999999999999999999 "

スクロールしてみましょう。

10 P=0:CLS 20 FORI=0TO7:LC31,I:?STR$([I]+P,1);:NEXT 30 SCROLL LEFT:P=(P+1)%LEN([0]):GOTO20

(RUN on IchigoJam web)

ロゴ画像の色は下記ようになっているので、こちらを256色カラーに変換しましょう。

10 LET[0],"#EB624E","#EB6B93","#6E92CC","#AD8EC0","#52AEE2","#8BC33C","#B2CC29","#EBC61D","#F5A948","#EF816E" RUN

16進数6桁のカラーコード。文字列はダイレクトモードで格納すると化けてしまうので、プログラム内に書いて、RUNしてセットしておきましょう。

どう変換するか?まずは16進数一桁のコードを10進数にしてみるところからスタートします。まずはキャラクターコードの確認から。

FORI=0TO255:POKE#900+I,I:NEXT

#900は画面を表すアドレス、0から255までのコードを表示すると、数字がアルファベットより先にあることがわかります(アドレスを忘れてしまったら、HELPコマンド)。 数字だったら0のコードを引き、アルファベットだったら数字とアルファベットの間の数だけずらせばOKですね。

C=ASC("C") C=C-48:IF C>9 C=C-7 ?C

16進数を10進数に変換できました。ここでもうひと工夫して、短くしましょう。(C>64)はCが64より大きい時1に、以下の時は0になるので、IF文を省略できます。

C=C-48-7*(C>64)

この調子で2桁16進数に対応しましょう。

S="10" C=ASC(S):D=ASC(S+1):N=(C-48-7*(C>64))<<4+D-48-7*(D>64) ?N

これを使いやすいようにサブルーチンにします

100 @S2HEX:C=ASC(S):D=ASC(S+1):N=(C-48-7*(C>64))<<4+D-48-7*(D>64):RTN

6桁のRGBをそれぞれ10進数にもどし、8bitのRGBへと再構築します。

110 @S2RGB:S=S+1:FORI=0TO2:GSB@S2HEX:S=S+2:[I+10]=N:NEXT:N=[11]&#E0+[10]>>5<<2+[12]>>6:RTN S="#FF1020":GSB@S2RGB:?BIN$(N)

変換できたので、いよいよ全部まとめて変換します。

?"9 LET[23]";:FORJ=0TO9:S=[J]:GSB@S2RGB:?",";N;:NEXT:? 9 LET[23],125,126,143,151,171,208,212,220,189,255,157 OK

色コードパレットが完成しました!

WS2812Bのドライバと組み合わせて、できあがり!

1 '32x8-WS2812B 10 POKE#700,240,181,114,182,9,36,36,2,9,25,1,36,164,70,27,76,11,120,91,9,0,240,31,248,11,120,155,8,7,34,19,64,0,240,25,248,11,120,3,34,19,64,91,0,0,240,19,248,97,68,1,48,31,34,16,66,234,209,66,9 20 POKE#73C,8,42,8,208,31,49,1,35,93,66,172,70,26,66,225,209,2,49,156,70,222,231,98,182,240,189,128,37,155,0,255,34,34,96,3,39,9,38,43,66,1,208,9,39,3,38,1,63,253,209,0,34,34,96,1,62,253,209,109,8 30 POKE#778,239,209,112,71,4,0,1,80 40 IFRLRUNR>>8,R&255 SAVE3 NEW 1 'IchigoJam 32x8 WS2812B 2 [0]="0 2 3 6 : : ::: : " 3 [1]="0 2 6 :::::: :: : : " 4 [2]="0 111 222 3 444 555 6 777 888888 :: : ::::::: " 5 [3]="0 1 2 2 3 4 4 5 5 6 7 7 8 8 8 : ::: ::: : : " 6 [4]="0 111 2 2 3 444 555 666 7777 8 8 8 :: : : ::::::: " 7 [5]=" 4 : ::: : : " 8 [6]="99999999999 444 999999999999999999 : : : :: :: " 9 LET[23],125,126,143,151,171,208,212,220,189,157,255 10 [7]=0:P=0:CLS:R=FILE()<<8+20:LRUN3 20 FORI=0TO7:IFP<LEN([I]):C=ASC([I]+P)-25:POKE#91F+32*I,[C] 30 NEXT 40 U=USR(#700,0) 45 IF BTN() WAIT10 50 SCROLLLEFT:P=(P+1)%65:GOTO20 SAVE0


「IchigoJam体験」とスクロール表示

ドライバを3番に保存、掲示板を0番と設定しています。ご利用環境に合わせてご変更ください。

links
- IchigoJamの画面からダイレクトであやつる、256色カラー32x8電光掲示板!Armマシン語ジグザグドライバ for WS2812B
- IchigoJamに日本語漢字を表示させる方法 powered by 8x8日本語フリーフォント「美咲フォント」

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / high-res profile image