フラグを使って明るさ制御しよう!
最初に見た完成イメージだと少しずつ明るくなって、少しずつ暗くなって行くという繰り返しでした。
しかし今作ったプログラムを実行すると、少しずつ明るくなって、明るさが最大の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)にすることをフラグクリア
と言いますよ
では、がんばってー!
コメント