目次
前
次
乱数によるデータ生成
ライントレーサの動作を確認するため
路面情報を、乱数で生成してみました。
利用するライントレーサは、以下。
ライントレーサの前面には、次の赤外線を利用した
フォトリフレクタを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
目次
前
次