SHIROのIchigoJam日記

IchigoJamの電子工作とプログラミングをメインに

IchigoJam RPiモバイル

Raspberry Piにはたくさんの周辺機器が出ていますが、HDMI液晶の拡張ボードがいくつかあります。
それらの中で、以下の品を入手しました。

接続してIchigoJam RPiを動かした所、すぐに画面が表示できました。

※細かい点を追記します。

  • 接続はGPIOコネクタを差し込むのと、付属のHDMI-HDMIの「コ」の字形のコネクタをHDMI端子に差します。
  • Raspbianで使うには付属のCDからイメージ作成などが必要のようです。IchigoJam RPiでは接続しただけで画面が映りました。
  • 拡張ボードに付いているmicroUSB端子にケーブルを差して電源供給します。Raspberry Piにも同時に電源供給されるので、電源ケーブルは1本で良いです。
  • 液晶の裏側にプッシュスイッチが付いていて、バックライトの輝度が調整できます。デフォルトは10段階の「8」ですが、私は「10」の最大輝度にしています。

このモニタボードは、GPIOピンが横に引き出されていてそのまま使えます。
そこで、GPIOに接続する一体型モバイルユニットを作りました。

ユニバーサル基板に上下左右+アクションボタン、ブザーを配置。
IoTモバイルバッテリ「Cheero Canvas」と、Raspberry Piを支えるアクリル板を下に重ねています。

基板の回路図はこちら。右側のコネクタはUSBシリアル接続用です。
※2018/2/2 ファームウェア1.2b18に合わせてブザーの配線を変更

Raspberry Piに接続するとこんな感じです。

システムとしては、スロット0にセレクタプログラムを入れて自動起動します。
01〜99の数字を上下左右のボタンで変更、アクションボタンを押すと指定した番号のプログラム(スロット1〜99)を実行します。


細かいことですが、バッテリに給電ボタンが付いているので、それでシステム電源のON/OFFができます。Raspberry Piに電源スイッチが無いので、これはなかなか便利です。


先日作った横シューティングゲームを起動した所。もちろんボタンで操作できるように改造しました。

セレクタプログラムはこちら。
※2018/2/2 ファームウェア1.2b18に合わせてBEEPの処理を変更

1 '*RPi Selecter
2 CLV:CLS:N=1
3 BEEP:GSB15
4 IF!IN(9)CONT
5 '@NLOOP
6 H=!IN(2)-!IN(1)
7 V=!IN(4)-!IN(3)
8 N=N+H+V*10
9 IFN<1N=N+99
10 IFN>99N=N-99
11 GSB15
12 WAIT10
13 IFIN(9)GOTO5
14 BEEP:LRUNN
15 '@PRTN
16 M=N/10:X=8:Y=8:GSB19
17 M=N%10:X=16:GSB19
18 RTN
19 '@PRTN1
20 C=#180+M*8
21 FORB=0TO7
22 D=PEEK(C+B):LCX,Y+B
23 FORP=0TO7
24 ?CHR$((D&#80)=#80);:D=D<<1
25 NEXT
26 NEXT:RTN

ボタン操作に改造した横シューティングゲームはこちら。
※2018/2/2 ファームウェア1.2b18に合わせてBEEPの処理を変更

1 'H Shooting
2 CLV:CLS:?"SCORE 0":Y=12
3 FORE=20TO36STEP4:GSB9:FORB=0TO12STEP3:IF[B]GSB13
4 NEXT:B=(E-20)/4*3:IF![B]&&(!IN(9))GSB12
5 IF[E]GSB16 ELSEIF!RND(30)GSB15
6 WAIT2:NEXT:IF!MGOTO3
7 LCX,Y:?"*";:LC12,12:?"GAME OVER":W=30:BEEP30,30
8 IFIN(9)CONTELSERUN
9 U=X-!IN(1)*(X>0)+!IN(2)*(X<30):V=Y-!IN(3)*(Y>1)+!IN(4)*(Y<22)
10 LCX,Y:?CHR$(0);:X=U:Y=V:IFSCR(X,Y)=237M=1:RTN
11 LCX,Y:?CHR$(243);:RTN
12 [B]=1:[B+1]=X+1:[B+2]=Y:LC[B+1],[B+2]:?"-";:RTN
13 C=[B+1]:D=[B+2]:LCC,D:?CHR$(0);:C=C+1:[B+1]=C:IFC>30[B]=0:RTN
14 LCC,D:?"-";:GSB20:RTN
15 [E]=1:[E+1]=30:[E+2]=RND(22)+1:[E+3]=RND(2)*2-1:LC[E+1],[E+2]:?CHR$(237);:RTN
16 F=[E+1]:G=[E+2]:LCF,G:?CHR$(0);:F=F-1:IFF<0[E]=0:RTN
17 G=G+[E+3]:IFG<1ORG>22[E+3]=-[E+3]:CONT
18 [E+1]=F:[E+2]=G:IFX=F&&Y=GM=1:RTN
19 LCF,G:?CHR$(237);:GSB20:RTN
20 K=0:FORI=20TO36STEP4:FORJ=0TO12STEP3:IF[I]&&[J]&&[I+1]=[J+1]&&[I+2]=[J+2]K=I:L=J
21 NEXT:NEXT:IF!KRTN
22 [K]=0:[L]=0:LC[K+1],[K+2]:?"*";:S=S+1:LC6,0:?S:W=3:BEEP:LC[K+1],[K+2]:?CHR$(0);:RTN