目次

乱数によるデータ生成

 ライントレーサの動作を確認するため
 路面情報を、乱数で生成してみました。

 利用するライントレーサは、以下。



 ライントレーサの前面には、次の赤外線を利用した
 フォトリフレクタを3個配置。



 フォトリフレクタの代用としたIchigoJamは、次のように
 OUTを利用。




 フォトリフレクタが、3ビットで路面の情報を
 出力すれば、10進数で0から7になります。

 関数RNDを利用すれば、RND(n)で0からn-1までの
 乱数を生成できます。

 配列[0]に乱数が格納されたとして、OUT_1からOUT_3
 へと出力するサブルーチンを定義。

 サブルーチンを100行からとしておきます。

100 ' send
110 LET [1],[0] & 1
120 LET [2],([0] >> 1) & 1
130 LET [3],([0] >> 2) & 1
140 FOR I=1 TO 3
150   OUT I,[I]
160 NEXT
170 WAIT 60
180 RTN

 2進数で表現すると、0から7は次のようになります。

0 -> 000
1 -> 001
2 -> 010
3 -> 011
4 -> 100
5 -> 101
6 -> 110
7 -> 111

 最下位ビットを論理積を使って取り出すのと
 1ビット右シフトして、目的のビットを取得。
 これを配列に入れて、OUT命令で出力すればよい
 と考えています。



 サブルーチンを呼び出す側は、乱数で0から7を
 生成して、配列に入れるまでを繰り返せばよいと
 考えて、次のように定義。

10 ' TEST RND
20 LET [0],RND(8)
30 GOSUB 100
40 IF BTN() GOTO 60
50 GOTO 20
60 ? "exit"
70 END

 まとめます。

10 ' TEST RND
20 LET [0],RND(8)
30 GOSUB 100
40 IF BTN() GOTO 60
50 GOTO 20
60 ? "exit"
70 END
100 ' send
110 LET [1],[0] & 1
120 LET [2],([0] >> 1) & 1
130 LET [3],([0] >> 2) & 1
140 FOR I=1 TO 3
150   OUT I,[I]
160 NEXT
170 WAIT 60
180 RTN

 ラベルを利用すると、次のように書き換えられます。

10 ' TEST RND
20 @LOOP
30 LET [0],RND(8)
40 GSB @SEND
50 IF BTN() GOTO @EXIT
60 GOTO @LOOP
70 @EXIT
80 ? "exit"
90 END
100 @SEND
110 LET [1],[0] & 1
120 LET [2],([0] >> 1) & 1
130 LET [3],([0] >> 2) & 1
140 FOR I=1 TO 3
150   OUT I,[I]
160 NEXT
170 WAIT 60
180 RTN


目次

inserted by FC2 system