PR

microbit アナログ/デジタル信号

microbit

フラグを使って明るさ制御しよう!

最初に見た完成イメージだと少しずつ明るくなって、少しずつ暗くなって行くという繰り返しでした。

しかし今作ったプログラムを実行すると、少しずつ明るくなって、明るさが最大の255になった瞬間に突然真っ暗になって、の繰り返しです。

少しずつ暗くなって行く、の部分が作られていませんね。

アナログ信号を波形イメージで表すと下の図のようになります。

明るさが最大になったら、少しずつ暗くなるようにしたいです。

そこで下のようなプログラムを作りたくなるかもしれません。

もしブライトネスが255以上なら
  変数ブライトネスを-1だけ増やす
そうでなければ
  変数ブライトネスを1だけ増やす

しかしこれは間違っていて正しく動きません。なぜだかわかりますか?

ブライトネスは0から1ずつ増えていき、255に到達したとします。

次はブライトネスは-1だけ増えて254になります。

おー、暗くなってるじゃーん!

となるものの、この次はブライトネスは1だけ増えて255になります。

さらに次はブライトネスは-1だけ増えて、また254になります。

これが延々と繰り返されることになります。

255 -> 254 -> 255 -> 254 -> 255 ->…….

これを解決するために使うのがフラグ(=旗)です。

ブロックリーの鳥でフラグを学習しましたね。

フラグは上がっているか下がっているかのどちらかですよね、つまり0か1のデジタル値です。

そしてフラグは変数を使って作ります

フラグ名は「下げるフラグ」とでもしておきましょうか。

そして最初だけブロックに初期値を”偽”として追加します。

最初だけ
  変数ブライトネスを0にする
  変数下げるフラグを偽にする

偽(読み:ぎ)は論理ブロックの中にありますよ
英語で言うfalseと同じで、0のことです

やりたいことはこんな感じです。

もし下げるフラグが偽なら
  明るくする(変数ブライトネスを増やす)
  もし明るさが255以上だったら
    下げるフラグを真にする
そうでなければ
  ●自分で作ってみましょう↓
  <明るさを下げる処理>
  <明るさが0以下だったら下げるフラグを偽にする処理>

下げるフラグが偽だったら明るくしていき、最大の255に到達したら下げるフラグを真にセットします。

すると、次からはそうでなければの中の処理で暗くしていきます。

暗くする処理の中で、最小の0に到達したら下げるフラグを偽にセットします。

その後はまた明るくする処理に移っていきます。

つまり、明るさを見ながらフラグを切り替えて、明るくするか暗くするか処理を変えている、ということになります。

フラグを
真(true)にすることをフラグセット
偽(false)にすることをフラグクリア
と言いますよ

では、がんばってー!

コメント

タイトルとURLをコピーしました