• 検索結果がありません。

ラップタイム計測機能を付けてください レベル 1 だけでもよいです

ドキュメント内 7 : N p.1/105 (ページ 71-83)

o processElapsed

レベル 2: ラップタイム計測機能を付けてください レベル 1 だけでもよいです

次ページ以降では、赤い文字はレベル 2 を表してい ます

できるだけ、レベル 2 にチャレンジしましょう

p やってみよう 2

ハードウェアの構成

タッチセンサー (スイッチ) をセンサーポート a につなぎます タッチセンサー (スイッチ) をセンサーポート b につなぎます 4 桁ディスプレイをバスポートにつなぎます

使い方 ( 仕様 )

1. ボタンを押すと、0 が表示されます

2. スイッチ a を押すと、4 桁ディスプレイに 101 秒単位で経過時間が表示されます このとき、スイッチ b を押すと、そのときの時間が止まって表示されます

この間、時間の計測は続いています

再びスイッチ b を押すと、経過時間の表示に戻ります

3. 再びスイッチ a を押すと、そのときの時間が止まって表示されます 4. このとき、もう 1 度スイッチ a を押すと、時間の計測を再開します 5. そうではなく、スイッチ b を押すと、0 が表示され、2 に戻ります

本物を見て確かめよう

ここでスライドを 止めてください

ストップウォッチの状態遷移図を描いてみよう 最初はレベル 1 から始めるとよいでしょう

完成形のヒントは、実はこのマテリアルの前の方にありますね

p ストップウォッチの o 状態遷移図

0が表示 されている

計測された 時間が表示 されている

経過時間が 表示されて

いる

ボタン

→開始,  0を表示

スイッチ a

→計測開始

1/10秒

→更新, 表示

スイッチ a

→計測  時間表示 スイッチ a

→計測再開 スイッチ b

→0を表示 ボタン→停止

動いて いない

p ストップウォッチの状 o 態遷移図 ( ラップ付き )

0が表示 されている

計測された 時間が表示 されている

経過時間が 表示されて

いる

ラップタイム が表示されて いる (1) ラップタイム が表示されて いる (2)

ボタン

→開始,  0を表示

1/10秒

→更新, 表示

1/10秒

→更新 スイッチ a

→計測  時間表示

スイッチ a

→計測停止 スイッチ a

→計測再開

スイッチ a

→計測再開 スイッチ b

→0を表示 ボタン→停止

動いて いない

スイッチ b

→表示 スイッチ b

→計測時間表示

ここでスライドを 止めてください

ブレイクダウンする方針を考えてみよう

状態は、どのような変数 (の組) で表せるでしょうか

イベントを 2 種類に分けて、when/run タスクにそれぞれ任せましょう

when タスクの方が、緊急に対処すべきイベントを受け付けるようにします

p 方針を決める

どのような変数が必要かを考えます

計測中の時間を表現できる必要があります 現在、計測中かを区別できる必要があります

現在、ラップタイムを表示しているかを区別できる必要があります

ラップタイム自体の値も必要なので、ラップタイムを表す変数の値に意味を もたせる (例: ゼロ = 表示していない) ことで区別できます

ふたり (when/run タスク ) で実行することを考えます

when タスクは、応答性が高い必要のあるイベントを待つことにします スイッチが押されるのを待ち構えて処理します

run タスクは、その他のイベントを待つことにします 時間の経過を待ちます

ここでスライドを 止めてください

when タスクと run タスクの状態遷移図を描いてみよう

p when タスクの o 状態遷移図

スイッチ待ち (ゼロ表示)

スイッチ待ち (結果表示)

スイッチ待ち (経過表示中)

スイッチ待ち (ラップタイム

表示中 1) スイッチ待ち (ラップタイム

表示中 2)

スイッチ a

→結果表示

スイッチ a

→計測停止 スイッチ a

→タイマリセット

スイッチ a

→タイマ  リセット スイッチ b

→表示クリア

スイッチ b

→ラップタイム  クリア

スイッチ b

→結果表示

・基本的にはスイッチを待つ

・計測中か区別が必要

・ラップタイムを表示しているか  区別が必要

・計測中は run タスクに時間を  測ってもらう

・赤い部分は  レベル2

p run タスクの o 状態遷移図

タイマリセット 待ち

割り込み処理 (when タスク)

完了待ち

タイマ待ち

タイマ

→計測中であれば  タイマリセット,  ラップタイム表示中  でなければ経過表示 タイマ

→計測中でなければ何もしない

スイッチ a スイッチ a

スイッチ b

スイッチ b

割り込み処理 完了

→表示クリア

・基本的にはタイマを待つ

・when タスクに割り込まれることがある

・スイッチ b が押されても

 割り込まれるが、その影響はない

・赤い部分は  レベル2

ここでスライドを 止めてください

when タスクと run タスクのトップレベルの PAD を描いてみよう イベントへの対応を整理して考えましょう

基本的には状態で振り分けますが、スイッチ a への対応はラップタイムとは 独立しています

大雑把に考えましょう

細かなことは、手続きとしてまとめて考えて、あとで作りましょう

p run タスクの o トップレベル

run =

リセットする        when 起動         

時計機能          run タスクの本体は時計機能の手続きに任せることにします

実際に時間を測る手続きです

p when タスクの o トップレベル

when = loop

どちらも押されていない  何もしない ビープ音を鳴らす    

スイッチaが押されている

E EE

ドキュメント内 7 : N p.1/105 (ページ 71-83)