目次
前
信号機エミュレート
小学生のための「ものづくり教室」で作った交通信号を
エミュレートする内容をIchigoJamで実現してみます。
3つのLEDと3本の抵抗を利用します。
イメージは、以下。
抵抗を3.3V電源に接続し、IchigoJamの出力論理値を
'0'にしたときに、点灯することにします。
回路は、以下。
点灯、消灯は、次の対応をすればよいでしょう。
色の対応は、次のようにします。
交通信号にするには、色を変化させるシーケンスを
考えないといけないので、ヨーロッパ式で実現して
みます。
5 OUT 2,1:OUT 3,1:OUT 4,1
10 OUT 2,0:WAIT 60:OUT 2,1
20 OUT 3,0:WAIT 60:OUT 3,1
30 OUT 4,0:WAIT 60:OUT 4,1
40 OUT 3,0:WAIT 60:OUT 3,1
50 GOTO 10
60 END
ESCキーを使っての終了の他に、IchigoJam基板上に
あるボタンで終了するようにしてみます。
5 OUT 2,1:OUT 3,1:OUT 4,1
10 OUT 2,0:WAIT 60:OUT 2,1
20 OUT 3,0:WAIT 60:OUT 3,1
30 OUT 4,0:WAIT 60:OUT 4,1
40 OUT 3,0:WAIT 60:OUT 3,1
50 IF BTN() GOTO 70
60 GOTO 10
70 ? "exit"
80 END
サブルーチンを用意して、点灯するLEDを番号で
指定して処理してみます。
5 OUT 2,1:OUT 3,1:OUT 4,1
10 LET A,2:GOSUB 100
20 LET A,3:GOSUB 100
30 LET A,4:GOSUB 100
40 LET A,3:GOSUB 100
50 IF BTN() GOTO 70
60 GOTO 10
70 ? "exit"
80 END
100 '
110 OUT A,0
120 WAIT 60
130 OUT A,1
140 RETURN
最初に全LEDを消灯する部分もサブルーチンにします。
5 GOSUB 150
10 LET A,2:GOSUB 100
20 LET A,3:GOSUB 100
30 LET A,4:GOSUB 100
40 LET A,3:GOSUB 100
50 IF BTN() GOTO 70
60 GOTO 10
70 ? "exit"
80 END
100 '
110 OUT A,0
120 WAIT 60
130 OUT A,1
140 RETURN
150 OUT 2,1:OUT 3,1:OUT 4,1
160 RETURN
FORを利用して、短くもできるでしょう。
150 FOR I=2 TO 4
160 OUT I,1
170 NEXT
180 RETURN
配列を利用して、点灯位置と待ち時間をまとめて
指定できるようにしてみます。
5 GOSUB 150
10 LET [0],2,60:GOSUB 100
20 LET [0],3,30:GOSUB 100
30 LET [0],4,55:GOSUB 100
40 IF BTN() GOTO 60
50 GOTO 10
60 ? "exit"
70 END
100 '
110 OUT [0],0
120 WAIT [1]
130 OUT [0],1
140 RETURN
150 FOR I=2 TO 4
160 OUT I,1
170 NEXT
180 RETURN
配列に時間カウントを入れることができるので
柔軟性があるようにできました。
交通信号の他に、3個のLEDを正三角形の頂点に
配置すると、電子風車を実現できます。
次のようにLEDを並べるとよいかと。
論理値の'1'を出力したときに、点灯する場合
回路は、以下とします。
プログラムは、次のように変更します。
5 GOSUB 150
10 LET [0],2,60:GOSUB 100
20 LET [0],3,30:GOSUB 100
30 LET [0],4,55:GOSUB 100
40 IF BTN() GOTO 60
50 GOTO 10
60 ? "exit"
70 END
100 '
110 OUT [0],1
120 WAIT [1]
130 OUT [0],0
140 RETURN
150 FOR I=2 TO 4
160 OUT I,0
170 NEXT
180 RETURN
ラベル利用で、次のように書き換えられます。
5 GSB @LOFF
10 @LOOP
20 LET [0],2,60:GSB @LCON
30 LET [0],3,30:GSB @LCON
40 LET [0],4,55:GSB @LCON
50 IF BTN() GOTO @EXIT
60 GOTO @LOOP
70 @EXIT
80 ? "exit"
90 END
100 @LCON
110 OUT [0],1
120 WAIT [1]
130 OUT [0],0
140 RETURN
150 @LOFF
160 FOR I=2 TO 4
170 OUT I,0
180 NEXT
190 RETURN
OUT_2、OUT_3、OUT_4は、次のように配置されています。
IchigoJamの基板には、凹コネクタがあるので、ブレッド
ボードで使うワイヤーで信号機や風車のLEDと接続すると
よいでしょう。
OUT命令は、次のようにすると、OUT_1からOUT_6までに
論理値の'1'を出力できます。
- OUT 1,1 => OUT 1
- OUT 2,1 => OUT 2
- OUT 3,1 => OUT 4
- OUT 4,1 => OUT 8
- OUT 5,1 => OUT 16
- OUT 6,1 => OUT 32
OUT_1からOUT_6までのすべてに論理値の'0'を
出力したいときは、「OUT 0」でよくなります。
OUT命令に与えるパラメータを、ひとつに限定して
プログラムを書くと、以下。
5 OUT 0
10 LET [0],2,4,8
20 FOR I=0 TO 2
30 OUT [I]
40 WAIT 60
50 NEXT
60 IF BTN() GOTO 80
70 GOTO 20
80 OUT 0
90 END
ラベル利用だと、次のようになります。
5 OUT 0
10 LET [0],2,4,8
20 @LOOP
30 FOR I=0 TO 2
40 OUT [I]:WAIT 60
50 NEXT
60 IF BTN() GOTO @EXIT
70 GOTO @LOOP
80 @EXIT
90 OUT 0
95 END
目次
前