目次

乱数で遊ぶ

 IchigoJamのBASICには、乱数が用意されています。

 0からN-1までの乱数を生成するには、A=RND(N)
 としておけばよいのです。

 乱数を利用すれば、動作試験が簡単にできます。

 次のような場面を想定。

 0から7までの数値が与えられたとき、1、4のとき
 70を出力し、それ以外は50を出力する。

 プログラムでは、次のように定義します。

10 ' test5
20 @LOOP
30 LET R,RND(8)
40 LET D,50
50 IF R=1 OR R=4 LET D,70
60 ? D
70 IF BTN() GOTO @EXIT
80 GOTO @LOOP
90 @EXIT
95 END

 次のようなクリスマスツリーのLEDを点滅させる
 ときには、点灯するLEDの位置をデタラメに決め
 ないとならないでしょう。



 回路図では、次のようにすればよいはず。



 IchigoJamには、OUT_1からOUT_6まで、6出力ある
 ので、これら出力にLEDを接続して、どのLEDを点灯
 するのかを決めましょう。

 1から6までの値を決めたいので
    L = RND(6)+1
 として、0から5を生成して1を
 加えます。

 Lに1から6の値が入っているので
 該当するLEDを点灯するには、次の
 ように書けばよいはず。

  OUT L,1

 他のLEDは消灯しておきたいので、最初に
 全部のLEDを消灯してから、上の命令を
 使えばよいと考えましょう。

 サブルーチンにすると、以下。

100 @LON
110 FOR I=1 TO 6
120   OUT I,0
130 NEXT
140 OUT L,1
150 RETURN

 サブルーチンを呼び出す方は、Lの値を決めて
 おけばよいので、乱数で値を決めたならGSBで
 呼び出すことにして対応。

10 ' test51
20 @LOOP
30 L = RND(6)+1
40 GSB @LON
50 WAIT 60
60 IF BTN() GOTO @EXIT
70 GOTO @LOOP
80 FOR I=1 TO 6:OUT I,0:NEXT
90 END
100 @LON
110 FOR I=1 TO 6
120   OUT I,0
130 NEXT
140 OUT L,1
150 RETURN

 全部のLEDを消灯することは、最初と最後に
 やっておいた方がよいので、書き換えます。

10 ' test52
20 GSB @LOFF
30 @LOOP
40 L = RND(6)+1
50 GSB @LOFF:GSB @LON:WAIT 60
60 IF BTN() GOTO @EXIT
70 GOTO @LOOP
80 GSB @LOFF
90 END
100 @LOFF
110 FOR I=1 TO 6
120   OUT I,0
130 NEXT
140 RETURN
200 @LON
210 OUT L,1
220 RETURN

 OUT命令で'1'を与えたときにLEDが点灯するのでは
 なくて、'0'を与えたときに点灯するような、次の
 回路では、どうすればよいか考えます。



 '1'で消灯するので、2つあるサブルーチンを
 次のように書き換えるだけで対応できるはず。

100 @LOFF
110 FOR I=1 TO 6
120   OUT I,1
130 NEXT
140 RETURN
200 @LON
210 OUT L,0
220 RETURN

 サブルーチンの内容を変更すれば、呼び出し側が
 何もしないでよいため、わかりやすいでしょう。


目次

inserted by FC2 system