2022-07-22
夜のjig.jp新社屋、右上で光っているのは・・・

16x7ピクセル、16byteで表現できるjig.jpロゴ!

「jig.jp by PCG on IchigoJam」

TSUGIさんにお願いしたjig鯖江新社屋のサイン、アチコチのピクセル表現!

駐車場の車椅子マークも・・・


「車椅子ドット絵」

7x8ピクセル、IchigoJamのPCG、8byteで収まるドット絵です!


トイレのサインも文字フォントもドット絵!


15x15のLED電光パネルを作って、アニメーションさせてみました。


16x16マトリクスLED付属のスポンジを重ねるだけでもいい感じですが、3Dプリンターなどで適度に区切ってあげるとピクセル感が出て良い感じになります。


WS2812Bの16x16マトリクスLEDの裏面の配線をはんだごてで溶かして分離し、3本線をIchigoJamの5V/GND/LEDへ接続。IchigoJamには、microUSBから5Vを給電。下記プログラムを書き込めば、光るサインのできあがり!

1 @ARUN 10 POKE#700,8,34,18,2,10,68,148,70,240,181,114,182,9,36,36,2,9,25,29,76,9,32,1,180,16,32,0,240,17,248,1,49,1,56,250,209,32,49,1,57,16,32,0,240,9,248,1,57,1,56,250,209,1,188,33,49,1,56,236,209,98,182 20 POKE#73E,240,189,11,120,15,34,19,64,6,34,83,67,3,181,97,70,201,24,11,136,0,240,7,248,75,136,0,240,4,248,139,136,0,240,1,248,3,189,128,37,255,34,34,96,3,39,9,38,43,66,1,208,9,39,3,38,1,63,253,209 30 POKE#77A,0,34,34,96,1,62,253,209,109,8,239,209,112,71,128,0,1,80 110 LRUN1 SAVE0 NEW 100 LET[0],0,0,0,1,59,1,16,4,56,63,63,63 150 CLS 200 ?"000000000000000" 201 ?"000300000003000" 202 ?"003000000000300" 203 ?"033333000333330" 204 ?"003000000000300" 205 ?"000300000003000" 206 ?"000000000000000" 207 ?"000100000000000" 208 ?"000000000002000" 209 ?"001110000000000" 210 ?"001010000022200" 211 ?"010001000020200" 212 ?"000100000020200" 213 ?"000100000002000" 214 ?"000000000022200" 250 A=USR(#700):WAIT60:CLS 300 ?"000000000000000" 301 ?"000300000003000" 302 ?"003000000000300" 303 ?"033333000333330" 304 ?"003000000000300" 305 ?"000300000003000" 306 ?"000000000000000" 307 ?"000000000002000" 308 ?"000100000000000" 309 ?"000000000022200" 310 ?"001110000020200" 311 ?"011011000020200" 312 ?"000000000002000" 313 ?"000100000002000" 314 ?"000100000000000" 350 A=USR(#700):WAIT60 360 GOTO150 SAVE1 LRUN0

10-30行で書き込んでいるバイナリデータは、asm15表記したArmマシン語のドライバです。ソースはこちら!

' LED用 WS2812B 32x8 #800に3byteパレット最大16色パレット、R, G, B(キャラクターコードの下位4bit、0やSPCが0) ' R0 - data count ' R1 - data address #900(VRAM)から1byte 1pixel = 1color palette #800 ' R2 - temp OUT value 0/#FF, & 15 ' R3 - data value, temp ' R4 - GPIO address ' R5 - bit count ' R6 - wait count buf ' R7 - wait count ' R12 - #800 palette address @WS2812B R2=8 R2=R2<<8 R2+=R1 R12=R2 PUSH {LR,R4,R5,R6,R7} CPSID R4=9 R4=R4<<8 R1=R1+R4 R4=[@OUT]L R0=9 ' send 9line @LOOP_LINE PUSH {R0} 'send line front R0=16 @LOOP_DATA GOSUB @SEND_DOT R1+=1 R0-=1 IF !0 GOTO @LOOP_DATA 'R1+=15 R1+=16+16 'send line back R1-=1 R0=16 @LOOP_DATA_BACK GOSUB @SEND_DOT R1-=1 R0-=1 IF !0 GOTO @LOOP_DATA_BACK POP {R0} 'R1+=17 R1+=17+16 R0-=1 IF !0 GOTO @LOOP_LINE @END CPSIE POP {PC,R4,R5,R6,R7} 'send 1dot @SEND_DOT 'param R1:address R3=[R1] ' palette R2=15 R3&=R2 R2=6 ' palette #800から配列3要素、6byteずつ R3*=R2 PUSH {LR,R0,R1} R1=R12 R1=R1+R3 R3=[R1+0]W ' G GOSUB @SEND_BYTE R3=[R1+1]W ' R GOSUB @SEND_BYTE R3=[R1+2]W ' B GOSUB @SEND_BYTE POP {PC,R0,R1} @SEND_BYTE 'send R3 to GPIO(R4), use R2, R5, R6, R7 R5=#80 @LOOP_BIT R2=#FF [R4]L=R2 R7=3 '(3*4+1)=13 <- 16.8+-7.2 R6=9 '(9*4+1)=37 <- 43.2+-7.2 R3&R5 IF 0 GOTO @SKIP_LOOP_BIT R7=9 '(9*4+1)=37 <- 43.2+-7.2 R6=3 '(3*4+1)=13 <- 16.8+-7.2 @SKIP_LOOP_BIT R7-=1 'wait R7*4+1 clock IF !0 GOTO -1 R2=0 [R4]L=R2 R6-=1 'wait R6*4+1 clock IF !0 GOTO -1 R5=R5>>1 IF !0 GOTO @LOOP_BIT RET @OUT DATA L #50010000+`10000000 'LED(PIO1_5)

ジグザグに配置されたWS2812Bに合わせて、逆方向、正方向と交互に繰り返しているのがポイントです。


こちら、今月のサイバーフライデーの会場、2Fセミナールームで朝の筋トレをしている様子。広々快適。

links
- jig.jp、鯖江の新社屋で業務スタート!TSUGIコラボで完成、エントランスに巨大LEDウォールの秘密
- ピクセル表現 at jig新社屋 powered by TSUGI

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS