3 ボタンスイッチを使ってみよう

ボタンでLEDを信号機点灯させる



新しくButtonLEDというプロジェクトを追加します。(忘れた人はこちらへ
「~ですか?」 という問いを行うメソッドは、通常「Is~()」の形をとります。
ここで用いるのは、「左のボタンが押されているか?」で、「BrainPad.Button.IsLeftPressed()」となります。(BrainPadについているボタングループの中の機能BrainPad.Button.IsLeftPressedを実行するという意味)このメソッドは、true(Yes)、false(No)で答えの値を返してきます。if文は( )の中の値がtrueの場合にその後の一文のみ実行することになっています。ただし、中括弧{ }で囲むと複数の文も一文とみなすことができます。





ボタンスイッチで信号機LEDを点灯させる
        private void main()
        {
            BrainPad.LightBulb.SetColor(BrainPad.Color.Black);
            BrainPad.TrafficLight.TurnOffAllLights();
            while (true)
            {
                if (BrainPad.Button.IsLeftPressed())
                   BrainPad.TrafficLight.TurnGreenLightOn();
                else BrainPad.TrafficLight.TurnGreenLightOff();
                if (BrainPad.Button.IsRightPressed())
                    BrainPad.TrafficLight.TurnRedLightOn();
                else BrainPad.TrafficLight.TurnRedLightOff();
                if (BrainPad.Button.IsUpPressed())
                    BrainPad.TrafficLight.TurnYellowLightOn();
                else BrainPad.TrafficLight.TurnYellowLightOff();
            }
        }
 1 
 2 
 3 電球LED消灯
 4 信号機LED消灯
 5 永久ループ
 6 
 7 左側のボタンが押された場合
 8 緑のLED点灯
 9 そうでなければ、緑のLED消灯
10 右側のボタンが押された場合
11 赤のLED点灯
12 そうでなければ、赤のLED消灯
13 上側のボタンが押された場合
14 黄のLED点灯
15 そうでなければ、黄のLED消灯
16 
17 


やってみよう
電球LEDをボタンで4色に色を変えてみましょう。

効率の良いプログラムにする

上記のプログラムは、どのボタンが押されたかどうかをいつもチェックしています。これ以外の仕事をさせると、ボタンチェックの仕事がおろそかになってしまいます。  朝食にトーストを食べるとします。食パンをトースターにセットして焼きあがるのをずっと待っていることはないでしょう。焼きあがったらなんらかのお知らせがあるので、セットしたら焼きあがるまで、別の食材の作業を行うことが普通です。コンピュータは、働き者なので、面倒な仕事でも黙って文句も言わずに一生懸命仕事をします。しかし、トーストが焼きあがるまでずっと待っていた場合、下手をすると遅刻してしまうことになるかも知れません。ですから、コンピュータでも効率の良いプログラムを作るのが重要です。
 このお知らせをきっかけ(イベント Event)にして仕事をすることをイベント処理と呼びます。下記のプログラムでは、7、8行目でイベントが起こった場合の仕事先を定義しています。
 このイベントが起こった場合自体の設定プログラムはBrainPad.csの方で記述されています。

効率よくボタンでLEDを点滅させる
        private void main()
        {
            BrainPad.TrafficLight.TurnGreenLightOff();
            BrainPad.TrafficLight.TurnRedLightOff();
            BrainPad.TrafficLight.TurnYellowLightOff();
            BrainPad.LightBulb.TurnOff();
            BrainPad.Button.ButtonPressed += Pressed;
            BrainPad.Button.ButtonReleased += Released;
            int i = 0;
            while (true)
            {
                Debug.Print("Hello " + (i++));
                Thread.Sleep(500);
            }
        }
        static void Pressed(BrainPad.Button.DPad button, BrainPad.Button.State state)
        {
            switch (button)
            {
                case BrainPad.Button.DPad.Up: BrainPad.TrafficLight.TurnGreenLightOn(); break;
                case BrainPad.Button.DPad.Down: BrainPad.TrafficLight.TurnRedLightOn(); break;
                case BrainPad.Button.DPad.Left: BrainPad.TrafficLight.TurnYellowLightOn(); break;
                case BrainPad.Button.DPad.Right: BrainPad.LightBulb.SetColor(BrainPad.Color.White); break;
            }
        }
        static void Released(BrainPad.Button.DPad button, BrainPad.Button.State state)
        {
            switch (button)
            {
                case BrainPad.Button.DPad.Up: BrainPad.TrafficLight.TurnGreenLightOff(); break;
                case BrainPad.Button.DPad.Down: BrainPad.TrafficLight.TurnRedLightOff(); break;
                case BrainPad.Button.DPad.Left: BrainPad.TrafficLight.TurnYellowLightOff(); break;
                case BrainPad.Button.DPad.Right: BrainPad.LightBulb.SetColor(BrainPad.Color.Black); break;
            }
        }
    }
 1 
 2 
 3 あらかじめ
 4 全てのLEDを
 5 消灯しておく
 6 
 7 ボタンが押された場合にPressedメソッドが実行されるように設定
 8 ボタンが離された場合にReleasedメソッドが実行されるように設定
 9 
10 mainではボタンの処理はせずに
11 
12 もくもくとHello+数字を表示する仕事をする
13 500ms待つ
14 
15 
16 どのボタンが押されてもこのメソッドに飛んでくる
17 第一引数は、ボタンの種類(番号)第二引数はボタンの状態
18 ボタンの種類で仕事を振り分ける
19 
20 upボタンの場合は緑のLEDを点灯
21 downボタンの場合は赤のLEDを点灯
22 leftボタンの場合は黄のLEDを点灯
23 rightボタンの場合は電球LEDを白で点灯
24 
25 
26 どのボタンが離されてもこのメソッドに飛んでくる
27 
28 ボタンの種類で仕事を振り分ける
29 
30 upボタンの場合は緑のLEDを消灯
31 downボタンの場合は赤のLEDを消灯
32 leftボタンの場合は黄のLEDを消灯
33 rightボタンの場合は電球LEDを消灯
34 
35 
36