.NET Gadgeteer モジュールのデモ:Smart Multicolor LED Module ~ Part 2

.NET Gadgeteer のモジュール紹介シリーズ、Smart Multicolor LED モジュール の2回目です。
※メソッドが多いので 2回に分けて紹介

Multicolor LED v2.1

Multicolor LED の機能は以下の通りです。

  • (色間違いを訂正) ・・・ Part 1 で紹介
  • RGB 各色の点灯/消灯、白色の点灯/消灯 ・・・ Part 1 で紹介
  • 色指定して点灯 ・・・ Part 1 で紹介
  • RGB 各色を指定して色を追加/削除 ・・・ Part 1 で紹介
  • 1回だけ点滅/繰り返し点滅
  • 1回だけアニメーション/繰り返しアニメーション
  • 現在の色を取得
  • (Daisylink)

1回だけ点滅

念のため、点滅の定義をすると 「しばらく点灯してそのあと消灯する」 ことです。
ということは、TurnXXX と TurnOff メソッド、それにタイマーなり Thread.Sleep なりを使えば、点滅を実現することは可能です。

が、Multicolor LED にはもう少し簡単、というか直感的ににこれを実現する方法があります。それが BlinkOnce メソッド(1回だけ点滅)と BlinkRepeatedly メソッド(繰り返し点滅) です。

Multicolor LED の点滅ですが、デフォルトでは 1秒間だけ点灯します。

まずは BlinkOnce メソッドの例を見てみます。

  1. using System.Threading;
  2. using Microsoft.SPOT;
  3. using Gadgeteer.Modules.GHIElectronics;
  4. using GT = Gadgeteer;
  5. namespace MultiColorDemo
  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.             multicolorLed.GreenBlueSwapped = true;
  13.             DoDemo();
  14.             // Use Debug.Print to show messages in Visual Studio's "Output" window during debugging.
  15.             Debug.Print("Program Started");
  16.         }
  17.         private void DoDemo()
  18.         {
  19.             var interval = 2000;
  20.  
  21.             while (true)
  22.             {
  23.                 multicolorLed.BlinkOnce(GT.Color.Red);
  24.                 Thread.Sleep(interval);
  25.  
  26.                 multicolorLed.BlinkOnce(GT.Color.Green);
  27.                 Thread.Sleep(interval);
  28.  
  29.                 multicolorLed.BlinkOnce(GT.Color.Blue);
  30.                 Thread.Sleep(interval);
  31.  
  32.                 multicolorLed.BlinkOnce(GT.Color.Cyan);
  33.                 Thread.Sleep(interval);
  34.  
  35.                 multicolorLed.BlinkOnce(GT.Color.Magenta);
  36.                 Thread.Sleep(interval);
  37.             }
  38.         }
  39.     }
  40. }

上のコードは BlinkOnce ごとに 2秒間スリープしています。BlinkOnce がデフォルト 1秒点灯なので、結果として

赤で1秒点灯→1秒消灯→緑で1秒点灯→1秒消灯→・・・

となります。

おしゃれな雑貨カバーは娘に持っていかれてしまったのでw、代替として袋で覆ってみました。

上のコードで interval を 1000 (=1秒) にすると、赤で1秒点灯→緑で1秒点灯→・・・ となります。
さらに interval = 500 とすると、赤で500ms 点灯→緑で 500ms 点灯→・・・ となります。デフォルトでは 1秒点灯ですが、次の BlinkOnce メソッドの呼び出しのほうが優先されるためです。

「なるほど、1秒点灯なのはわかった。でも2秒点灯してから消灯したい時は?」 という疑問が出てきますよね、当然。
BlinkOnce メソッドはオーバーロードされています。第2引数として TimeSpan を渡すことで、その時間点灯してから消灯させることができます。

Code Snippet
  1. using System;
  2. using System.Threading;
  3. using Microsoft.SPOT;
  4. using Gadgeteer.Modules.GHIElectronics;
  5. using GT = Gadgeteer;
  6. namespace MultiColorDemo
  7. {
  8.     public partial class Program
  9.     {
  10.         // This method is run when the mainboard is powered up or reset.  
  11.         void ProgramStarted()
  12.         {
  13.             multicolorLed.GreenBlueSwapped = true;
  14.             DoDemo();
  15.             // Use Debug.Print to show messages in Visual Studio’s "Output" window during debugging.
  16.             Debug.Print("Program Started");
  17.         }
  18.         private void DoDemo()
  19.         {
  20.             var interval = 3000;
  21.             var ts = new TimeSpan(0, 0, 2);
  22.  
  23.             while (true)
  24.             {
  25.                 multicolorLed.BlinkOnce(GT.Color.Red, ts);
  26.                 Thread.Sleep(interval);
  27.  
  28.                 multicolorLed.BlinkOnce(GT.Color.Green, ts);
  29.                 Thread.Sleep(interval);
  30.  
  31.                 multicolorLed.BlinkOnce(GT.Color.Blue, ts);
  32.                 Thread.Sleep(interval);
  33.  
  34.                 multicolorLed.BlinkOnce(GT.Color.Cyan, ts);
  35.                 Thread.Sleep(interval);
  36.  
  37.                 multicolorLed.BlinkOnce(GT.Color.Magenta, ts);
  38.                 Thread.Sleep(interval);
  39.             }
  40.         }
  41.     }
  42. }

interval を 3秒、TimeSpan を 2秒にしています。
つまり、赤で 2秒点灯→1秒消灯→緑で 2秒点灯→1秒消灯→・・・ となります。

BlinkOnce はさらにオーバーロードされていて、例えば、

BlinkOnce(GT.Color.Red, new TimeSpan(0, 0, 2), GT.Color.Green);

のように第3引数にも Color を指定すると、赤で 2秒点灯後、消灯する代わりに緑で点灯し続けます。
(動画は省略)


繰り返し点滅

タイマーなどを使わずに繰り返し点滅をさせるメソッドもあります。BlinkRepeatedly メソッドがそれです。

あまりにも簡単すぎるのでソースコードや動画は省略しますが、例えば、

BlinkRepeatedly(GT.Color.Red);

とすると、赤で 1秒点灯→1秒消灯→赤で 1秒点灯→1秒消灯→・・・ となります。
「これだとあまりにも」という方は、こんなコードはいかがでしょうか。

Code Snippet
  1. using System;
  2. using System.Threading;
  3. using Microsoft.SPOT;
  4. using Gadgeteer.Modules.GHIElectronics;
  5. using GT = Gadgeteer;
  6. namespace MultiColorDemo
  7. {
  8.     public partial class Program
  9.     {
  10.         // This method is run when the mainboard is powered up or reset.   
  11.         void ProgramStarted()
  12.         {
  13.             multicolorLed.GreenBlueSwapped = true;
  14.             DoDemo();
  15.             // Use Debug.Print to show messages in Visual Studio's "Output" window during debugging.
  16.             Debug.Print("Program Started");
  17.         }
  18.         private void DoDemo()
  19.         {
  20.             var tsRed = new TimeSpan(0, 0, 2);
  21.             var tsBlue = new TimeSpan(0, 0, 3);
  22.  
  23.             multicolorLed.BlinkRepeatedly(GT.Color.Red, tsRed, GT.Color.Blue, tsBlue);
  24.         }
  25.     }
  26. }

引数を4つにすることで、赤で 2秒点灯→青で 3秒点灯→赤で 2秒点灯→青で 3秒点灯→・・・

を繰り返します。それぞれ秒数が違っていてもいいわけです。

 


現在の色を取得する

現在の色を取得することもできます。GetCurrentColor メソッド です。

Code Snippet
  1. using System;
  2. using System.Threading;
  3. using Microsoft.SPOT;
  4. using Gadgeteer.Modules.GHIElectronics;
  5. using GT = Gadgeteer;
  6. namespace MultiColorDemo
  7. {
  8.     public partial class Program
  9.     {
  10.         // This method is run when the mainboard is powered up or reset.   
  11.         void ProgramStarted()
  12.         {
  13.             multicolorLed.GreenBlueSwapped = true;
  14.             DoDemo();
  15.             // Use Debug.Print to show messages in Visual Studio's "Output" window during debugging.
  16.             Debug.Print("Program Started");
  17.         }
  18.         private void DoDemo()
  19.         {
  20.             multicolorLed.TurnOff();
  21.  
  22.             while (true)
  23.             {
  24.                 var currentColor = multicolorLed.GetCurrentColor();
  25.  
  26.                 if (currentColor == GT.Color.Black)
  27.                     multicolorLed.TurnRed();
  28.                 else if (currentColor == GT.Color.Red)
  29.                     multicolorLed.TurnGreen();
  30.                 else if (currentColor == GT.Color.Green)
  31.                     multicolorLed.TurnBlue();
  32.                 else
  33.                     multicolorLed.TurnRed();
  34.  
  35.                 Thread.Sleep(1000);
  36.             }
  37.         }
  38.     }
  39. }

現在の色を見て次の色を決めて点灯します。


DaisyLink (モジュールをシーケンシャルに接続する)

Multicolor LED の面白いところは、DaisyLink といってモジュール同士をシーケンシャルに接続する機能があることです。
Visual Studio のデザイナー画面で “Connect all modules” をしてしまうと、デフォルトだと7番および6番ソケットに Multicolor LED を接続します。6番ソケット側の接続を切って、Multicolor LED の “*” ソケットからもう一つの Multicolor LED の “X Y *” ソケットに向けてマウスをドラッグすると DaisyLink できます。

image

こんなコードを書いてみます。

Code Snippet
  1. using System;
  2. using System.Threading;
  3. using Microsoft.SPOT;
  4. using Gadgeteer.Modules.GHIElectronics;
  5. using GT = Gadgeteer;
  6. namespace MultiColorDemo
  7. {
  8.     public partial class Program
  9.     {
  10.         // This method is run when the mainboard is powered up or reset.   
  11.         void ProgramStarted()
  12.         {
  13.             multicolorLed.GreenBlueSwapped = true;
  14.             DoDemo();
  15.             // Use Debug.Print to show messages in Visual Studio's "Output" window during debugging.
  16.             Debug.Print("Program Started");
  17.         }
  18.         private void DoDemo()
  19.         {
  20.             multicolorLed.TurnOff();
  21.  
  22.             while (true)
  23.             {
  24.                 var currentColor = multicolorLed.GetCurrentColor();
  25.  
  26.                 if (currentColor == GT.Color.Black)
  27.                 {
  28.                     multicolorLed.TurnRed();
  29.                     multicolorLed1.TurnGreen();
  30.                 }
  31.                 else if (currentColor == GT.Color.Red)
  32.                 {
  33.                     multicolorLed.TurnGreen();
  34.                     multicolorLed1.TurnBlue();
  35.                 }
  36.  
  37.                 else if (currentColor == GT.Color.Green)
  38.                 {
  39.                     multicolorLed.TurnBlue();
  40.                     multicolorLed1.TurnRed();
  41.                 }
  42.                 else
  43.                 {
  44.                     multicolorLed.TurnRed();
  45.                     multicolorLed1.TurnGreen();
  46.                 }
  47.  
  48.                 Thread.Sleep(1000);
  49.             }
  50.         }
  51.     }
  52. }

 

 

これならいつでも手軽にクリスマス気分を味わえますねw


なかなか高機能で使い勝手のよいモジュールです。一見シンプルですが、アイデアによってはデバイスの状態を分かりやすく表示する出力デバイスになってくれますね。

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

こんなデモをライブで見てみたい方は こちらのページ からお申し込みください。
初心者/未経験者も大歓迎!というより、そういう方にぜひ組み込み開発を体験していただきたいな、と思います。
当日お貸しできるボード、モジュールは複数用意してありますので、どなたでもお気軽に参加してください。

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

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

.NET Gadgeteer モジュールのデモ:Smart Multicolor LED Module ~ Part 2 への1件のフィードバック

  1. ピンバック: .NET Gadgeteer モジュールのデモ:Smart Multicolor LED Module ~ Part 1 | 技術との戯れ

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中