目次
前
次
夜間点滅器(その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
目次
前
次