目次

ハードウエアテスト(その18)

 ボタンを押すと、一定時間ランプが点灯後、消灯する
 システムの動作を、エミュレートします。



 ランプは、IchigoJam基板にのっているLEDで代用すると
 考えれば、次のコードを思いつきます。

200 '
210 LED 1
220 FOR I=0 TO 60:WAIT 60:NEXT
230 LED 0
240 RETURN

 ボタンがIN_1に接続されているとして、ボタンの
 状態変化があったとするのは、シフトレジスタで
 状態を監視すればと考えました。

100 '
110 LET [0],[1]
120 LET [1],IN(1)
130 LET [2],0
140 IF [1]=0 AND [0]=1 LET [2],1
150 RETURN

 配列を利用して、現在とひとつ前の値を比較して
 変化があれば、変化ありという情報を格納します。




 ボタンに変化があれば、配列[2]の値が1になっているので
 この値を監視し、1になったときにLEDの点灯にもっていく
 とうまくいきそうです。

 初期化を前において、まとめてみます。

10 '
20 LED 0:LET [0],0,0,0
30 GOSUB 100:IF [2]=1 GOTO 50
40 GOTO 30

 行番号50からは、最初に作成したLEDの点灯と時間待ちを
 入れると良いでしょう。

10 '
20 LED 0:LET [0],0,0,0
30 GOSUB 100:IF [2]=1 GOTO 50
40 GOTO 30
50 LED 1
60 FOR I=0 TO 60:WAIT 60:NEXT
70 LED 0

 動作終了を表示して宣言した方がわかりやすいはず。

10 '
20 LED 0:LET [0],0,0,0
30 GOSUB 100:IF [2]=1 GOTO 50
40 GOTO 30
50 LED 1
60 FOR I=0 TO 60:WAIT 60:NEXT
70 LED 0
80 ? "Exit"
90 END

 待ち時間は可変としたいので、配列に値を入れて
 コードの先頭で数値を変えるだけで、対応できる
 ようにします。

10 '
20 LED 0:LET [0],0,0,0,60
30 GOSUB 100:IF [2]=1 GOTO 50
40 GOTO 30
50 LED 1
60 FOR I=0 TO [3]:WAIT 60:NEXT
70 LED 0
80 ? "EXIT"
90 END
100 '
110 LET [0],[1]
120 LET [1],IN(1)
130 LET [2],0
140 IF [1]=0 AND [0]=1 LET [2],1
150 RETURN

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

10 '
20 LED 0:LET [0],0,0,0,60
30 @LOOP
40 GSB @HND:IF [2]=1 GOTO @NEX
50 GOTO @LOOP
60 @NEX
70 LED 1
80 FOR I=0 TO [3]:WAIT 60:NEXT
90 LED 0
92 ? "EXIT"
94 END
100 @HND
110 LET [0],[1]
120 LET [1],IN(1)
130 LET [2],0
140 IF [1]=0 AND [0]=1 LET [2],1
150 RTN


目次

inserted by FC2 system