※この記事は「IchigoJam Advent Calendar 2019」に参加しています。
バーサライタ(POV)用のスティック形IchigoJamです。手に持って左右に振ると、点滅するLEDで文字が見えます。ライブ会場で振ればオタ芸ができます(^_^)
★12/31にコミックマーケット97(東京ビッグサイト)で販売予定です。
説明動画はこちら。
【IchigoJam】StickJam
先月にデザインフェスタVol.50へ出展した時に、振ったり回したりして文字が見えるバーサライタが人気でした。それをヒントに、バーサライタ用IchigoJamの基板を起こして、作ってみました。
基板の裏に、電源の単3電池×3本があります。
LED部分は、マイコン内蔵フルカラーLED・WS2812B(チップタイプ)を8個搭載。IchigoJam BASIC 1.4から、このLEDを簡単に制御できるようになりました。フルカラーなので色もいろいろ変えられます。
表示する文字は2文字分(縦8ドット×横16ドット)です。
チップタイプLEDは見た目がカッコイイのですがはんだ付けがかなり大変なので、子ども向けには5mm砲弾タイプのLEDにした方がいいかもしれません。ちょっと考え中です。
写真ではLEDの左側にありますが、黒いチルトスイッチが2個付いています。通常のバーサライタでは、右に振る時と左に振る時で文字が逆(左右裏返し)に表示されてしまいます。このスティックでは、振る動きの切り替わりをチルトスイッチで検知して、左右どちらに振っても同じ向きで文字が見えるようにしています。
当初はジャイロセンサーを試したのですがうまく検知できず、ボール入りのチルトスイッチにしました。振るとカチカチ言うのが難点ですが、シンプルな物の方が案外うまく行くようです。
両端にビデオ端子とUSBキーボード端子が付いているので、モニタとキーボードをつなげると、普通にIchigoJamとして使えます。中のプログラムの書き換えもできます。
下の方に「1・2・3」と書かれた切り替えスイッチが付いています。
→3接点小型スライドスイッチ SS-14MDP2(共立エレショップ)
中のプログラム次第ですが、これで表示する文字を切り替えることができます。
カラーLEDとセットボタン。
これもプログラム次第ですが、モニタが無くても、表示する文字をキーボードなどで設定することができます。
プログラム
セレクタ
ファイル0にこのプログラムを入れて自動起動させると、切り替えスイッチの位置を読み取って、ファイル1~3のプログラムを起動します。
10 @ARUN:'*Selecter 20 OUT 1,-2:OUT 2,-2:OUT 3,-2 30 IF !IN(5) LRUN 1 40 IF !IN(6) LRUN 2 50 IF !IN(7) LRUN 3 60 GOTO 30
「上田」
左右に振ると「上田」の文字を表示します。
30~180行のデータを変更すれば、表示する文字が変えられます。
250~270行(1文字目)、350~370行(2文字目)の値を変えると、それぞれの文字の表示色(GRBの順)が変えられます。1文字目と2文字目で色を変えた方が、文字が見やすいようです。
10 '*Ueda 20 CLV:CLS 30 [80]=`01000000 40 [81]=`01000000 50 [82]=`01000000 60 [83]=`01111111 70 [84]=`01001000 80 [85]=`01001000 90 [86]=`01000000 100 [87]=`00000000 110 [88]=`01111111 120 [89]=`01001001 130 [90]=`01001001 140 [91]=`01111111 150 [92]=`01001001 160 [93]=`01001001 170 [94]=`01111111 180 [95]=`00000000 190 A=#900 200 FOR I=0 TO 7 210 FOR J=0 TO 7 220 M=1<<J 230 D=[80+I]&M 240 P=A+I*48+J*6 250 POKE P,70*(D>0) 260 POKE P+2,0*(D>0) 270 POKE P+4,0*(D>0) 280 NEXT 290 NEXT 300 FOR I=8 TO 15 310 FOR J=0 TO 7 320 M=1<<J 330 D=[80+I]&M 340 P=A+I*48+J*6 350 POKE P,0*(D>0) 360 POKE P+2,0*(D>0) 370 POKE P+4,70*(D>0) 380 NEXT 390 NEXT 400 @LOOP 410 X=IN(1):Y=IN(4) 420 IF X=0 && U=1 GSB @VM 430 IF Y=0 && V=1 GSB @VP 440 [0]=0:[1]=0:[2]=0 450 WS.LED 1,8 460 U=X:V=Y 470 GOTO @LOOP 480 @VP 490 WAIT 1 500 FOR I=0 TO 15 510 COPY #800,A+I*48,48 520 WS.LED 8 530 NEXT 540 RTN 550 @VM 560 WAIT 1 570 FOR I=15 TO 0 STEP -1 580 COPY #800,A+I*48,48 590 WS.LED 8 600 NEXT 610 RTN
以前に8LEDスティックで作ったバーサライタと同様に、表示データをいったんVRAMへ展開(190~390行)、チルトスイッチで振る方向の切り替わりを検知して(410~430行)、VRAMのデータを配列変数領域へコピーしながらLEDを光らせています(480~540行が順方向、550~610行が逆方向表示)。そのため起動後は、データをVRAMへ展開するのを3秒くらい待ってから、左右に振ってください。
キー入力カスタム
USB端子にキーボードをつないで、表示する文字をカスタマイズできるプログラムです。
- キーボードをつないで、切り替えスイッチをこのプログラムが入っているファイル番号にして、電源を入れます。
- セットボタンを押して、設定モードに入ります。カラーLEDが赤く点灯します。
- キーボードのカーソルキー(矢印キー)を押して、カラーLEDを見ながら表示色を設定します。←(左)で赤、↓(下)で緑、→(右)で青の値を変化させます。それぞれ「0」(消灯)~「7」(最大輝度)の8段階があり、「7」の時にキーを押すと「0」に戻ります。↑(上)を押すとリセットされて3色とも「0」(消灯)になります。
- 表示色が決まったら、表示したい1文字をキーボードから入力します。入力した文字がそのままIchigoJamフォントで設定されて、8個のLEDで表示パターンが1回レビューされます。
- 同様に、2文字目の表示色と文字を設定します。
- 2文字目の入力が終わると、その設定が保存されて、通常モードに戻ります。スティックを左右に振ると、設定した2つの文字が表示されます。
- 設定した文字と色は、プログラムと一緒にSAVEされるので(コード領域の末端に書きこんでいます)、電源を切っても消えません。新たな文字を設定するまで保持されます。
1 '*Key-In 2 CLV:WS.LED 9 3 N=0:GSB26 4 N=1:GSB26 5 V=#900:M=0:L=15:W=0 6 IF BTN() GOTO 36 7 X=IN(1):Y=IN(4) 8 IF X=0 && T=1 GSB 20 9 IF Y=0 && U=1 GSB 14 10 [0]=0:[1]=0:[2]=0 11 WS.LED 1,8 12 T=X:U=Y 13 GOTO 6 14 WAIT 1 15 FOR I=M TO L 16 COPY #800,V+I*48,48 17 WS.LED 8:WAIT W 18 NEXT 19 RTN 20 WAIT 1 21 FOR I=L TO M STEP -1 22 COPY #800,V+I*48,48 23 WS.LED 8:WAIT W 24 NEXT 25 RTN 26 A=#FF0+N*4 27 C=PEEK(A):G=PEEK(A+1):R=PEEK(A+2):B=PEEK(A+3) 28 V=#900+384*N 29 FOR I=0 TO 7:E=128>>I 30 FOR J=0 TO 7 31 D=PEEK(C*8+J)&E:P=V+I*48+J*6 32 POKE P,G*(D>0) 33 POKE P+2,R*(D>0) 34 POKE P+4,B*(D>0) 35 NEXT:NEXT:RTN 36 CLV:R=10 37 FOR N=0 TO 1 38 IF BTN(28) R=R+10:IF R>70 R=0 39 IF BTN(31) G=G+10:IF G>70 G=0 40 IF BTN(29) B=B+10:IF B>70 B=0 41 IF BTN(30) R=0:G=0:B=0 42 [24]=G:[25]=R:[26]=B:WS.LED 9 43 CLK:WAIT10:C=INKEY() 44 IF C<32 GOTO 38 45 A=#FF0+N*4 46 POKE A,C,G,R,B:GSB26 47 M=0:L=7:W=10:GSB14 48 NEXT 49 SAVE FILE() 50 RUN