.NET Gadgeteer モジュールのデモ:Button Module

.NET Gadgeteer のモジュール紹介シリーズ、Button モジュールです。

Button Module

ボタンです。あえて取り上げるのも申し訳ない・・・と思いきや、LED が付いていて意外と使い道があります。
Joystick もボタンとして使えないこともないのですが、押しやすさはやはり、こちら Button モジュールに軍配が上がります。

Button の機能は以下の通り。

  • ボタンの押下をイベントで取得
  • ボタンの押下をポーリングで取得
  • LED の点灯/消灯
  • LED の状態取得
  • LED モード設定(ボタン操作にあわせた LED のオン/オフの指定)

 

なかなかデキるやつです。LED の使い方次第で便利なモジュールです。

 


ボタンの押下をイベントで取得

イベントドリブンです。分かりやすい操作ですね。
ボタンが押された時のイベントが ButtonPressed、離された時のイベントが ButtonReleased です。

モジュール自体が LED を載せていますが、あえて外の LED を点灯/消灯してみます。

image

  1. using Microsoft.SPOT;
  2.  
  3. using Gadgeteer.Modules.GHIElectronics;
  4.  
  5. namespace ButtonDemo
  6. {
  7.     public partial class Program
  8.     {
  9.         // This method is run when the mainboard is powered up or reset.  
  10.         void ProgramStarted()
  11.         {
  12.             button.ButtonPressed += new Button.ButtonEventHandler(button_ButtonPressed);
  13.             button.ButtonReleased += new Button.ButtonEventHandler(button_ButtonReleased);
  14.  
  15.             // Use Debug.Print to show messages in Visual Studio’s "Output" window during debugging.
  16.             Debug.Print("Program Started");
  17.         }
  18.  
  19.         void button_ButtonPressed(Button sender, Button.ButtonState state)
  20.         {
  21.             led7r.TurnLightOn(7, true);
  22.         }
  23.  
  24.         void button_ButtonReleased(Button sender, Button.ButtonState state)
  25.         {
  26.             led7r.TurnLightOff(7);
  27.         }
  28.     }
  29. }

 

動画を載せるまでもないシンプルなデモですが、載せないのも悔しいのでw 載せます。

 


ボタンの押下をポーリングで取得/LED の状態取得

Button モジュールは IsPressed プロパティを持っています。ポーリングして IsPressed を参照することでボタンの押下状態が取得できます。
タイマーの間隔によっては応答性が落ちますが、用途によってはこれもありですね。
関連するプロパティとして IsLedOn もあります。これはそのタイミングで LED が点灯しているかどうかを返してくれるプロパティです。

 

  1. using Microsoft.SPOT;
  2. using GT = Gadgeteer;
  3.  
  4. namespace ButtonDemo
  5. {
  6.     public partial class Program
  7.     {
  8.         // This method is run when the mainboard is powered up or reset.  
  9.         void ProgramStarted()
  10.         {
  11.             var timer = new GT.Timer(100);
  12.             timer.Tick += new GT.Timer.TickEventHandler(timer_Tick);
  13.             timer.Start();
  14.  
  15.             // Use Debug.Print to show messages in Visual Studio’s "Output" window during debugging.
  16.             Debug.Print("Program Started");
  17.         }
  18.  
  19.         void timer_Tick(GT.Timer timer)
  20.         {
  21.             if (button.IsPressed)
  22.                 led7r.TurnLightOn(7, true);
  23.             else
  24.                 led7r.TurnLightOff(7);
  25.         }
  26.     }
  27. }

 

動画は・・・さすがに要りませんね。

 


LED の点灯/消灯

Button モジュールは LED を1つ載せています。他のモジュールに頼らずにボタンの押下状態をユーザーに見せるのに使えます。

  • TurnLEDOn ・・・ LED を点灯
  • TurnLEDOff ・・・ LED を消灯
  • ToggleLED ・・・ LED の点灯/消灯を反転

ソースコードを分けるのも長くなってしまうので、まとめて紹介します。運よく Button モジュールを二つ持っているので、こんな風に接続してみます。
(もちろん一つ接続して、TurnLEDOn / TurnLEDOff と ToggleLED とを分けて処理しても全く問題ありません)

 

image

ソースコードはこんな感じ。

  1. using Microsoft.SPOT;
  2. using GT = Gadgeteer;
  3. using Gadgeteer.Modules.GHIElectronics;
  4.  
  5. namespace ButtonDemo
  6. {
  7.     public partial class Program
  8.     {
  9.         // This method is run when the mainboard is powered up or reset.  
  10.         void ProgramStarted()
  11.         {
  12.             button.ButtonPressed += new Button.ButtonEventHandler(button_ButtonPressed);
  13.             button.ButtonReleased += new Button.ButtonEventHandler(button_ButtonReleased);
  14.  
  15.             button1.ButtonPressed += new Button.ButtonEventHandler(button1_ButtonPressed);
  16.  
  17.             // Use Debug.Print to show messages in Visual Studio’s "Output" window during debugging.
  18.             Debug.Print("Program Started");
  19.         }
  20.  
  21.  
  22.         void button_ButtonPressed(Button sender, Button.ButtonState state)
  23.         {
  24.             button.TurnLEDOn();
  25.         }
  26.  
  27.         void button_ButtonReleased(Button sender, Button.ButtonState state)
  28.         {
  29.             button.TurnLEDOff();
  30.         }
  31.  
  32.  
  33.         void button1_ButtonPressed(Button sender, Button.ButtonState state)
  34.         {
  35.             button1.ToggleLED();
  36.         }
  37.     }
  38. }

 

button のほうが Pressed で LED 点灯、Released で LED 消灯します。button1 はボタンを押すごとに(Pressed の度に)トグルで点灯/消灯を切り替えます。

実際に動かしてみるとこうなります。

 


LED モード設定

 

LEDMode プロパティで LED モード設定を行うと、LED の点灯/消灯を宣言ベースで指定することができます。

  • Button.LEDModes.On ・・・LED を点灯する。TurnLEDOn メソッドと同様に使えます
  • Button.LEDModes.Off ・・・LED を消灯する。TurnLEDOff メソッドと同様に使えます
  • Button.LEDModes.OnWhilePressed ・・・ボタンを押している間、LED を点灯
  • Button.LEDModes.OnWhileReleased ・・・ボタンを離している間、LED を点灯
  • Button.LEDModes.ToggleWhenPressed ・・・ボタンを押したタイミングで LED の状態をトグル
  • Button.LEDModes.ToggleWhenReleased ・・・ボタンを離すタイミングで LED の状態をトグル

 

LEDModes.On / LEDModes.Off は TurnLEDOn / TurnLEDOff メソッドと同じように使えます。例えば、

button.TurnLEDOn();

button.LEDMode = Button.LEDModes.On;

とは等価。

ソースコードでいうとこんな感じです。

  1. using Microsoft.SPOT;
  2. using GT = Gadgeteer;
  3. using Gadgeteer.Modules.GHIElectronics;
  4.  
  5. namespace ButtonDemo
  6. {
  7.     public partial class Program
  8.     {
  9.         // This method is run when the mainboard is powered up or reset.  
  10.         void ProgramStarted()
  11.         {
  12.             button.ButtonPressed += new Button.ButtonEventHandler(button_ButtonPressed);
  13.             button.ButtonReleased += new Button.ButtonEventHandler(button_ButtonReleased);
  14.  
  15.             // Use Debug.Print to show messages in Visual Studio’s "Output" window during debugging.
  16.             Debug.Print("Program Started");
  17.         }
  18.  
  19.         void button_ButtonPressed(Button sender, Button.ButtonState state)
  20.         {
  21.             button.LEDMode = Button.LEDModes.On;
  22.         }
  23.  
  24.         void button_ButtonReleased(Button sender, Button.ButtonState state)
  25.         {
  26.             button.LEDMode = Button.LEDModes.Off;
  27.         }
  28.     }
  29. }

 

OnWhilePressed / OnWhileReleased と ToggleWhenPressed / ToggleWhenReleased とを使うと、タイマーもイベントハンドラーも使わずに、ボタンの状態や操作にあわせて LED を点灯/消灯できます。

  1. using Microsoft.SPOT;
  2. using GT = Gadgeteer;
  3. using Gadgeteer.Modules.GHIElectronics;
  4.  
  5. namespace ButtonDemo
  6. {
  7.     public partial class Program
  8.     {
  9.         // This method is run when the mainboard is powered up or reset.  
  10.         void ProgramStarted()
  11.         {
  12.             button.LEDMode = Button.LEDModes.OnWhilePressed;
  13.             button1.LEDMode = Button.LEDModes.ToggleWhenPressed;
  14.  
  15.             // Use Debug.Print to show messages in Visual Studio’s "Output" window during debugging.
  16.             Debug.Print("Program Started");
  17.         }
  18.     }
  19. }

 

ソースコードがとてもスッキリ!します。実際の動作は、上の2番目のデモと同じようになるので省略しますが、とても分かりやすいコードです。実用的なコードだと、他のモジュールとの関連があるのでイベントハンドラーやタイマーが必須になると思いますが、それらのロジックの中に LED の操作を含めずに済むので、ロジックが見やすくなるはずです。

 

単純に見えて、意外と面白い Button モジュール。上手い使い方を考えてみてください。

 


次回の技術ひろば.net の勉強会は 4月20日(土) の開催です。

申し込みサイトはまだありませんが(すみません・・・)、ご都合の付く方は今のうちにカレンダーに印を付けておいてください。
瀬尾への連絡方法をご存じの方は、事前にご連絡いただけるとさらにうれしいです。

会場も無事決まり、受付を始めました。こちらのページ からお申し込みください。

皆で .NET Gadgeteer で楽しみましょう!!

広告
カテゴリー: .NET Micro Framework タグ: , パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中