Menu

第3回 LEDをいろいろなタイミングで光らせてみよう


LEDをいろいろなタイミングで光らせてみよう。
まず、LEDを光らせる命令は LED 1 だったね。
これを 行番号のついたプログラムに書き直してみよう。例えば、こんな感じで
10 LED 1
ここで、10 は行番号というものだったね。BASICでは、プログラムは行番号をつけて書いて、プログラムの実行は、行番号の小さい番号から順番に実行が進んでいくよ。ただし、あとで出てくる特別な命令を使うと、指定した行番号に実行を飛ばすこともできるよ。
さて、たった1行でもプログラムとして実行できるよ。
プログラムを実行する命令は RUN だったね。
では、1行のプログラムだけど、実際に実行してみよう。
RUN
と入力すると、LEDが赤く点灯して
OK
と表示されるね。この OK はプログラムに間違いがなく、無事に実行を終了しました。というIchigojamからの返事だよ。

このままだと、LEDが赤く点いたままだね。LEDを消す命令は、LED 0 だったね。
それでは、新たに次のように20行目のプログラムを追加してみよう。
20 LED 0
プログラムを入力するときは、行の最後で「Enter」キーを押すよ。「Enter」キーを押すことでその行の内容を確定できるんだ。
入力したプログラムの内容を確認するときは、LIST を使ったね。
いま、入力してあるプログラムを確認してみよう。
LIST
と入力すると、
10 LED 1
20 LED 0

と表示されるね。これがいま、入力してあるプログラムだ。
では、 RUN と入力して実行してみよう。
LEDが点灯して、消えたかな。
あれあれ、LEDが点かなくなってしまったね。
どうしたのかな。
これはね。LEDの点灯と消灯のスピードがコンピュータの処理に間に合わなかったり、あるいは実際にはLEDは点灯したんだけど、あまりにも速く、次の行の20の行の命令が実行されてLEDが消えてしまったから、私たちにはLEDが点灯しなかったように見えてしまうことから起きることなんだ。
このようにプログラムは、速いスピードで実行されるので、周りの機器がそのスピードについていけなかったり、人間の目がついていくのが難しいことがあるんだ。これはね。ゲームを作ったり、CGで絵を表示したりするときには、注意しなければいけないことなんだ。あまりにも速く、次の行の実行が行われてしまうと、周辺装置の処理が間に合わなかったり、人間の目がついていけない。タイミングを合わせて、次の行の実行までに時間をかせぐ必要があるんだ。
BASICでは、時間をかせぐ命令として WAIT(数字) という命令があるよ。
WAIT というのは、英語で「待て」という意味なんだ。その後に書く(数字)は(待つ時間)を調整する数字なんだ。60 で1秒、120 で2秒になるんだ。30 では、0.5秒だよ。
では、行番号 10 と 行番号 20 の間に 行番号 15 として、WAIT 30を追加してみよう。
15 WAIT 30

LIST と入力して、プログラムを確認してみよう。
10 LED 1
15 WAIT 30
20 LED 0
と表示されたかな。
では、RUN と入力して実行してみよう。
今度は、LEDがしばらく(0.5秒)点灯して、そして消えたかな。

このLEDが点いたり、消えたりを例えば5回繰り返してみよう。
ちょうど、クリスマスツリーのライトのようにね。

繰り返しの命令は FOR I=1 TO 5 と NEXT を使うんだ。

5 FOR I=1 TO 5
30 NEXT


と入力してみよう。正しく入力できたかな。
LIST で確認してみよう。

5 FOR I=1 TO 5
10 LED 1
15 WAIT 30
20 LED 0
30 NEXT


と表示されたかな
正しくプログラムが表示されたら、RUN で実行して、5回LEDが点いたり消えたりするか、確認してみよう。
あれあれ?点いたり、消えたりしないで、しばらく点灯したら消えてしまったね。
これは何が起こっているのかな。

プログラムの流れをゆっくりと1行ずつ考えながら、追ってみよう。
このプログラムは、まず行番号 5 が実行されるね。
ここで I=1 が設定される(コンピュータは1回目の処理と回数を数えているんだ。)
次に行番号 10 が実行されて、LEDが点灯するね。
そして行番号 15 が実行されて、0.5秒待つ。
次に行番号 20 が実行されて、LEDが消える。
行番号 30 が実行されて、行番号 5 に戻る。
行番号 5 では、I に、1がプラスされて2回目と回数を数えている。
そして 行番号 10 が実行されて、LEDが点灯する。

ちょっと、待って!。行番号 30 が実行されて、行番号 5 が実行されて
行番号 10 でLEDが点灯するけど、ここの処理はコンピュータはあっという間に終えてしまいそうだね。つまり、LEDが消えてから、次に点灯するまでの時間が短くて、LEDの処理が間に合わなかったり、私たちには消えたことが分からなかったりする。これでは、LEDは点きっぱなしに見えてしまう。
それが5回繰り返されて、プログラムが終了したから、結局はLEDがしばらく点灯して点滅することなく、点いたままで、5回繰り返しが終了して消えたように見えたんだね。
さっきはLEDが点いている時間をかせぐために、WAIT の命令をつかったけど、今度はLEDが消えている時間をかせぐために、WAIT の命令を使う必要があるんだね。
ということで、行番号 20 と 30 の間に 行番号 25 として WAIT 30の命令を追加してみよう。

25 WAIT 30

と入力してみよう。正しく入力できたかな。
LIST で確認してみよう。

5 FOR I=1 TO 5
10 LED 1
15 WAIT 30
20 LED 0
25 WAIT 30
30 NEXT


と表示されたかな
正しくプログラムが表示されたら、RUN で実行して、5回LEDが点いたり消えたりするか、確認してみよう。
今度は、ちゃんと点いたり消えたり5回繰り返したね。
では、プログラムを工夫して10回、点いたり消えたりするように変更してみたり、
LEDが点いている時間や、消えている時間を長くしたり、短くしたりしてみよう。

このLEDを点けたり消したりするプログラムを参考にして、前回、作成した「自分の名前の頭文字のアルファベットを大きく表示する」プログラムを改良して、頭文字のアルファベットを表示したり、消したりするプログラムを作ってみよう。
まずは、前回、保存したプログラムを呼び出そう。もし、家で別な作業をして前回、保存したプログラムを消してしまった場合は、急いで入力し直してみよう。
最初にNEW と入力していま、メモリにあるプログラムを消してから
LOAD 0
と入力して、前回、保存したプログラムを呼び出そう。
例えば、こんな感じで前回、作ったプログラムが呼び出されたかな。

10 PRINT"   SSSS"
20 PRINT"  SS  SS"
30 PRINT"  SS"
40 PRINT"   SS"
50 PRINT"    SS"
60 PRINT"     SS"
70 PRINT"  SS  SS"
80 PRINT"  SS  SS"
90 PRINT"   SSSS"

まず、最初に画面をクリアする命令 CLS をいれよう。例えば、行番号 3 で。
3 CLS
次に繰り返しの命令 FOR I=1 TO 5 と NEXT をいれよう。
5 FOR I=1 TO 5

100 NEXT
行番号 100 は、自分のプログラムの行番号に合せて適当に変えよう。一番最後の行に追加になるように行番号 100 を変えて行番号をつけてみよう。

そして、表示する時間をかせぐ WAIT 30
画面をクリアする命令 CLS
画面を消している時間をかせぐ WAIT 30
を追加してみよう。例えば、こんな感じで。

93 WAIT 30
95 CLS
98 WAIT 30

この行番号 93 95 98 も自分のプログラムの行番号に合せて適当に変えよう。さっきの NEXTの前で、最後のPRINT の命令の後との間の行番号になるようにしよう。

LIST で確認してみよう。例えば、こんな感じになったかな。

3 CLS
5 FOR I=1 TO 5
10 PRINT"   SSSS"
20 PRINT"  SS  SS"
30 PRINT"  SS"
40 PRINT"   SS"
50 PRINT"    SS"
60 PRINT"     SS"
70 PRINT"  SS  SS"
80 PRINT"  SS  SS"
90 PRINT"   SSSS"
93 WAIT 30
95 CLS
98 WAIT 30
100 NEXT

正しくプログラムが表示されたら、RUN で実行して、5回大きな文字が表示されたり、消えたりするか、確認してみよう。

できたら、表示する文字を変えたり、表示する時間を変えたりしてみよう。

最後に完成したプログラムはSAVE 1として保存番号「1」のところに保存しておこう。