目次
前
次
ハードウエアテスト(その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
目次
前
次