目次

信号機エミュレート

 小学生のための「ものづくり教室」で作った交通信号を
 エミュレートする内容を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から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


目次

inserted by FC2 system