SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

8LEDスティックでバーサライタ

現在開発中のファームウェア1.4βで、LEDテープが簡単に制御できるようになりました。
秋月電子で売っている8LEDスティックを使って、簡単にバーサライタを作ってみました。
動画はこちら。

【IchigoJam】8LEDスティックでバーサライタ

f:id:shiro0922:20190821110940j:plain

8LEDスティックに0.65mm径の単芯線をはんだ付けして、IchigoJamとつなぎます。

LEDスティックの端子 IchigoJamの端子
5VDC VCC
GND GND
DIN LED

IchigoJamのソケットにそのまま挿せますし、スティックを線で支えられるので便利です。
f:id:shiro0922:20190821110941j:plain

プログラムに工夫が必要ですが、専用基板などが無くても簡単にバーサライタが作れるので、お勧めです。

プログラム

実行して、LEDを左右に振ると、ハート形が見えます。
基本的には文字パターンを縦1列ずつ順番に光らせているだけです。
ただ、なるべく高速に表示しないといけないので、LED表示用データをいったんVRAMに展開して、配列変数領域へ順番にCOPYで転送して表示しています。また、VIDEO 0で画面表示を止めて高速化しています。
実行すると画面表示がぐちゃぐちゃになるので、終了後はF8キーで画面を表示した後、F1キーで画面をクリアしてください。
VRAM容量の制限から、表示できる文字は16列までです。
※(8/21修正)LED色指定部分を修正

100 @ARUN:'*POV
110 CLV:VIDEO 0:CLS:P=#900
120 [80]=`00001110
130 [81]=`00011111
140 [82]=`00111111
150 [83]=`01111110
160 [84]=`11111100
170 [85]=`01111110
180 [86]=`00111111
190 [87]=`00011111
200 [88]=`00001110
210 L=9
220 FOR C=0 TO L
230 FOR B=0 TO 7
240 M=128>>B
250 D=[80+C]&M
260 A=P+C*48+B*6
270 POKE A,100*(D>0)
280 NEXT
290 NEXT
300 FOR C=0 TO L
310 COPY #800,P+C*48,48
320 WS.LED 8
330 NEXT
340 GOTO 300

なお、このプログラムではLEDを緑色に光らせていますが、270行を

270 POKE A+2,100*(D>0)

に変えると赤色、

270 POKE A+4,100*(D>0)

に変えると青色で光ります。

270 POKE A,100*(D>0)
271 POKE A+2,100*(D>0)
272 POKE A+4,100*(D>0)

と3行並べると白色になります。
3行それぞれの「100」の数値を0~255の範囲で変えると、色が変えられます。例えば、

270 POKE A,5*(D>0)
271 POKE A+2,100*(D>0)
272 POKE A+4,10*(D>0)

でピンクのハートになります。

IchigoRoulette

Five-Tenさん謹製のIchigoRoulette基板キットを、入手して作ってみました。
LEDが6個(OUT1~OUT6)、タクトスイッチが4個(IN1~IN4)載った拡張基板です。
f:id:shiro0922:20190819172736j:plain

いくつかプログラムを作ってみたので、以下に紹介します。

ルーレット

キット同封の説明書にルーレットのプログラムが載っているのですが、子ども向けにちょっと短くしました。
SW4(左下ボタン)で停止、SW3(右下ボタン)で再開します。

10 'ROULETTE
20 OUT 0
30 I=(I+1)%6
40 OUT I+1,1
50 BEEP
60 WAIT 5
70 IF IN(4) GOTO 20
80 IF IN(3) CONT
90 RUN

小惑星着陸

ルーレットの応用プログラムです。(前半はほぼ一緒なので、ルーレットを改造して作るといいでしょう)
起動すると、探査機が小惑星(黄色LED)の回りを回ります。減速ロケット(SW3、右下ボタン)と加速ロケット(SW4、左下ボタン)を操作して、探査機を小惑星に着陸させてください。黄色LEDで止まれば着陸成功、赤色LEDで止まってしまうと失敗です。
どれかのボタンを押すとリプレイします。

10 'LANDING
15 W=5
20 OUT 0
30 I=(I+1)%6
40 OUT I+1,1
50 BEEP
60 WAIT W
70 W=W+!IN(3)*5-!IN(4)*5
80 IF W<60 GOTO 20
90 BEEP 10+20*(I!=1),60
100 WAIT 60
110 IF IN()&15=15 CONT
120 RUN

サイモン(記憶ゲーム)

起動すると、LED4個(1,3,4,6)のうちのどれか1個が点灯します。
対応するボタンを押すと、次は出題が1個増えます。間違えないように順番にボタンを押してください。
回答をミスするとゲームオーバーです。どれかのボタンを押すとリプレイします。
なお、回答の際に複数のボタンを一度に押してもミスになります。正解を1個ずつ押してください。

10 '*SIMON
20 CLV:OUT 0
30 IF BTN() CONT
40 SRND TICK()+ANA(2)
50 [91]=1:[92]=3:[93]=4:[94]=6
60 [95]=7:[96]=14:[97]=13:[98]=11
70 WAIT 60
80 @QUEST
90 M=M+1
100 [M]=RND(4)+1
110 FOR I=1 TO M
120 N=[I]
130 OUT [90+N],1
140 GSB @PLAY
150 OUT [90+N],0
160 NEXT
170 @ANSWER
180 A=0
190 @ALOOP
200 N=0
210 FOR I=1 TO 4
220 IF IN()&15=[94+I] THEN N=I
230 NEXT
240 IF N=0 THEN GOTO @ALOOP
250 A=A+1
260 IF N<>[A] GOTO @END
270 OUT [90+N],1
280 GSB @PLAY
290 OUT [90+N],0
300 IF A<M GOTO @ALOOP
310 WAIT 60
320 GOTO @QUEST
330 @END
340 OUT 63
350 BEEP 30,120
360 WAIT 120
370 @RESTART
380 IF IN()&15=15 GOTO @RESTART ELSE RUN
390 @PLAY
400 IF N=1 PLAY "R32D"
410 IF N=2 PLAY "R32G"
420 IF N=3 PLAY "R32A"
430 IF N=4 PLAY "R32B"
440 WAIT 30
450 RTN

もぐらたたき

起動すると、LED4個(1,3,4,6)のうちのどれか1個が点灯するので、対応するボタンを押して、もぐらを叩いてください。
30秒間叩くとゲームが終了して、叩いたスコアがLEDで2進数表示されます。どれかのボタンを押すとリプレイします。
なお、ズルしてボタンを押しっぱなしにすると、お手つきになってスコアが減ります。

10 '*Mogura Tataki
20 CLV
30 IF BTN() CONT
40 SRND TICK()+ANA(2)
50 [91]=1:[92]=3:[93]=4:[94]=6
60 [95]=7:[96]=14:[97]=13:[98]=11
70 L=1800:N=80
80 WAIT 60
90 CLT
100 @LOOP
110 OUT 0
120 WAIT 10
130 @MRND
140 R=RND(4)+1
150 IF R=M GOTO @MRND
160 M=R
170 OUT [90+M],1
180 BEEP 30
190 W=TICK()/N
200 @TATAKU
210 IF IN()&15=[94+M] GOTO @HIT
220 IF TICK()/N=W GOTO @TATAKU
230 IF IN()&15!=[94+M] S=S-(S>0)
240 IF TICK()<L GOTO @LOOP
250 OUT 0
260 BEEP 30,60
270 WAIT 60
280 OUT S
290 IF IN()&15=15 CONT
300 RUN
310 @HIT
320 OUT 0
330 BEEP
340 S=(S+1)%64
350 N=N-2:IF N<=0 N=1
360 WAIT 10
370 GOTO @LOOP

ヘタコンカムロボ

PCN北はりま謹製の「HetaPad」で、カムロボをリモコン操作してみました。
動画はこちら。

【IchigoJam】ヘタコンカムロボ

上下左右ボタンで前進・後退・左旋回・右旋回。Xボタンで左アーム、スペースボタンで右アームが動きます。
ついでに有機ELで操作内容が文字表示されます。
以前にもオリジナルのリモコンで動かすカムロボを作って、クラブや展示会で出してみましたが、子どもたちはリモコン操作が大好きです(^_^) 自分の操作で目に見えて反応するインタラクティブ性がいいんでしょうね。

プログラム

HetaPadでカムロボを操作するプログラムです。
もちろん普通のキーボードでも操作できます。
※Xキーを使っているので、ファームウェア1.4βで動かしてください。

1 '*Hetacon CamRobo OLED
2 GSB 24
3 WAIT 120:OUT 0:PWM 3,240:PWM 4,50
4 G=0:CLS
5 IF BTN(28) G=34:?"TURN LEFT"
6 IF BTN(29) G=17:?"TURN RIGHT"
7 IF BTN(30) G=33:?"GO FORWARD"
8 IF BTN(31) G=18:?"GO BACK"
9 OUT G
10 GSB 30
11 T=TICK()
12 IF T<180 GOTO 4
13 IF BTN(88) GSB16
14 IF BTN(32) GSB20
15 WAIT6:GOTO4
16 PWM 3,145:?"LEFT ARM UP":GSB 30
17 WAIT 30
18 PWM 3,240:?"LEFT ARM DOWN":GSB 30
19 CLT:RTN
20 PWM 4,145:?"RIGHT ARM UP":GSB 30
21 WAIT 30
22 PWM 4,50:?"RIGHT ARM DOWN":GSB 30
23 CLT:RTN
24 let[0],#4000,33,#227F,#700,#B5F0,#1840,#230B,#21B,#18C9,#4694,#2410
25 let[11],#7803,#DB,#18D2,#2708,#2300,#2507,#5D56,#40FE,#415B,#3D01
26 let[21],#D2FA,#700B,#3101,#3F01,#D1F4,#3001,#4662,#3C01,#D1EC,#BDF0
27 let[90],#D5AE,#8D80,#2014,#A100,#DAC8,#8112,#D9CF,#DBF1,#A440,#AFA6
28 ifi2cw(60,#800,1,#8B4,20)?"E"
29 video3:copy#A00,#800,62:clv
30 for[98]=0to7:i=usr(#A08,#900+[98]*16)|i2cw(60,#A01,1,#B00,128):next:rtn

有機EL(OLED)の表示には、国野亘さんのサブルーチンを使っています。