目次

夜間点滅器(その3)

 夜になると、4つのLEDをランダムに点滅させ
 イルミネーションとして使う装置をIchigoJam
 で作ってみます。

 4つのLEDは、次のように接続します。



 ランダムに点滅させるには、BASICで用意されて
 いる関数RNDを使います。

 4つのLEDには、番号を1から4まで振っておいて
 発生させた乱数を2進数で表し、1から4ビットの
 値(論理値の'0'か'1'のどちらかになる)を、ピン
 番号1から4にOUT命令で出力します。

 発生した乱数が11のとき、2進数では1011となります。
 ビット3から0までを取り出して、OUT命令で出力します。

 2進数で4ビットが必要なので0から15までの乱数を
 発生すればよいでしょう。
 これは簡単で、次のように命令を書きます。

    LET A,RND(16)

 欲しいのは4ビットなので、乱数を4ビットで表現できる
 数値になるようにします。

    LET A,(RND(16) AND #F)

 配列[1]から[4]に4ビット分の論理値を入力します。

100 ' generate random number
110 LET A,(RND(16) AND #F)
120 LET [1],(A AND 1) : LET A,(A >> 1)
130 LET [2],(A AND 1) : LET A,(A >> 1)
140 LET [3],(A AND 1) : LET A,(A >> 1)
150 LET [4],(A AND 1) : LET A,(A >> 1)
160 RETURN

 FOR...NEXTを利用すると、同じ命令を2つ
 以上並べることをしないですみます。

100 ' generate random number
110 LET A,(RND(16) AND #F)
120 FOR I=1 TO 4
130   LET [I],(A AND 1)
140   LET A,(A >> 1)
150 NEXT
160 RETURN

 出力する論理値ができれば、OUT命令を使うだけ。

100 ' generate random number
110 LET A,(RND(16) AND #F)
120 FOR I=1 TO 4
130   LET [I],(A AND 1)
140   LET A,(A >> 1)
150   OUT I,[I]
160 NEXT
170 WAIT 90
180 RETURN

 残るのは、昼夜判定だけですが、センサーからの
 出力値を使うようにします。回路は、以下。



 センサーの出力値を使うプログラムは簡単です。

10 ' night flasher
20 GOSUB 200
30 LET N,IN(1)
40 IF N=0 GOSUB 100 ELSE GOSUB 200
50 IF BTN() GOTO 70
60 GOTO 30
70 ? "EXIT" : GOSUB 200
80 END

 LEDをすべて消灯するサブルーチンを書いて
 まとめると、以下となります。

10 ' night flasher
20 GOSUB 200
30 LET N,IN(1)
40 IF N=0 GOSUB 100 ELSE GOSUB 200
50 IF BTN() GOTO 70
60 GOTO 30
70 ? "EXIT" : GOSUB 200
80 END
100 ' generate random number
110 LET A,(RND(16) AND #F)
120 FOR I=1 TO 4
130   LET [I],(A AND 1)
140   LET A,(A >> 1)
150   OUT I,[I]
160 NEXT
170 WAIT 90
180 RETURN
200 ' turn off all LED
210 FOR I=1 TO 4 : OUT I,0 : NEXT
220 RETURN

 ラベル利用で、次のようにも書けます。

10 ' night flasher
20 GSB @LOFF
30 @LOOP
40 LET N,IN(1)
50 IF N=0 GSB @GEN ELSE GSB @LOFF
60 IF BTN() GOTO @EXIT
70 GOTO @LOOP
80 @EXIT
90 ? "EXIT" : GSB @LOFF
95 END
100 @GEN
110 LET A,(RND(16) AND #F)
120 FOR I=1 TO 4
130   LET [I],(A AND 1)
140   LET A,(A >> 1)
150   OUT I,[I]
160 NEXT
170 WAIT 90
180 RTN
200 @LOFF
210 FOR I=1 TO 4 : OUT I,0 : NEXT
220 RTN


目次

inserted by FC2 system