で時間を計る方法(タイマーと待つ) | Scrachとロボットプログラミング
スクラッチで時間を計っていろいろな処理を行う方法には2つあります。
一つはスクラッチのタイマーを使う方法、もう一つは待つコマンドと変数を使う方法です。
ここではこのふたつの方法を具体的にやってみます。
スクラッチの起動
クムクムサイトからWEB版スクラッチをGoogleChromeかMicrosoftEdgeで起動しましょう。
方法1.タイマーを使う
スクラッチには時間をできるだけ正確に計る命令として、タイマーというブロックを使う方法があります。このブロックはスクラッチが起動されてから「タイマーをリセット」をクリックするまで時間を計り続けます。
使い方
スクラッチ→コード→調べる を選択するとその中の下の方に[タイマー]というタイマー時間を取得できる変数ブロックと、その下に[タイマーをリセット]という命令ブロックがあります。
一番簡単な方法として、まず、[タイマー]ブロックのチェックボックスをチェック状態にしてみましょう。下記の様に、ステージにタイマーという数字がどんどん変化するのが見えます。
この変化する状態のまま[タイマーをリセット]ブロックをクリックしてください。
その瞬間にタイマー値が0になりそこからカウントアップが始まります。
プログラムでは次のように書くと、[スタートフラグ]をクリックされるたびに0になるコントロールができます。
「タイマー」の隣にあるチェックボックスにチェックを入れると計っている時間を確認することが出来ます。
スタートから3秒経ったらキャットがこんにちはという
このコマンドを使って3秒経ったらステージ上のキャットが「こんにちは!」と2秒間いうプログラムを作ってみます。
なぜかうまく動かない
実際にこのプログラムを動かしてみると、なぜだか思った通りの動きをしてくれません。
3秒をとうに超えているのに「こんにちわ!」としゃべってくれません。
3秒ピッタリが検出できない
というのもこの方法は[タイマー]の値が3秒ピッタリになった時という条件になっていて、タイマーが実際にくるくる回っていて3.000になったのをどうしてもタイミング的にプログラムが検出できないからこの条件が成立しないからです。
修正(3より大きくなったら
このプログラムが思惑通りに動くようにするには、3より大きくなったらという条件に書き直します。プログラムは下記のとおりです。
実際にはどんな時間で検知しているのかを調べてみる
このままではずっとタイマーが回り続けるので、実際には何病何?で検出しているのかがわかりません。
そのため、検出できた時の時間を変数に代入して調べて着ることにします。
どうも3.0003秒で反応をしているようです。
変数に代入する時間もあるので、ほぼこの方法で3秒の検出はできているといえますね。
方法2:[●秒まつ]をつかう
同じ処理を[●秒まつ]というコマンドを使って作ってみましょう。
時間を測りたかったので、先ほどのプログラムの横に並べて、スタートフラグがクリックされたときに両方のプログラムを同時に起動してみます。
こんにちわ と右のプログラムでキャット言ったときの時間はタイマーによって計測できているはずです。
結果としては3.0004秒でした。
なんどか行うと、3.0002秒だったり3.0003秒だったりしますが、多少の誤差はあっても正確に時間は測れているようです。