LEDのクラスを作る

LEDsクラス

 ラズパイについているLEDを制御してみましょう。このLEDは全面の上部についているLEDです。
取り合えず、クラスの正しい構築の練習としてこれを作ってみましょう。
これから作るクラスはUMLで記述すると下記のような簡単なものです。

クラス名はLEDsとする
LEDという名前のGPIOMemクラスの4つの長さの配列
点滅させるためのメソッドWriteがある
Lengthは定数で外部からアクセスできる


このような考え方でクラスを作ると次のようになります。
LEDを制御するクラス
  public class LEDs
  {
    public const int Length = 4;
    GPIOMem[] LED = new GPIOMem[Length];
    public LEDs()
    {
      LED[0] = new GPIOMem (GPIOPins.V2_Pin_P1_22);
      LED[1] = new GPIOMem (GPIOPins.V2_Pin_P1_18);
      LED[2] = new GPIOMem (GPIOPins.V2_Pin_P1_16);
      LED[3] = new GPIOMem (GPIOPins.V2_Pin_P1_12);

      for (int i = 0; i < LED.Length; i++) 
        LED [i].PinDirection = GPIODirection.Out;
    }

    public void Write(int n, bool state)
    {
      LED [n].Write (state);
    }
  }
 1 
 2 
 3 LEDは4つある
 4 IOを制御するオブジェクトの配列
 5 コンストラクタ
 6 
 7 ピンの制御を行うオブジェクトの生成
 8 4つのLED分作る
 9 
10 
11 
12 
13 LEDに繋がる各々のピンは出力に設定する
14 
15 
16 LEDの点滅を指定するメソッド
17 
18 
19 
20


ピンの名前 GPIOPins.V2_Pin_P1_22 の命名規則がよく分からない。取り合えずコネクタ1の22番ピンという意味だとしておきます。
その上で、ラズパイマウス側の22ピンは何かと調べてみると、LED0と書いてあります。その横にGPIO25いう謎の文字があります。これはCPU側の番号のようです。従って、同じピンでもラズパイで分かりやすい命名と、CPU側から見たプログラミングが分かりやすくしている命名法があるので混乱しやすいですね。間違えないようにしてください。



4つのLEDを点滅させるメイン
        public static void Main(string[] args)
        {
            LEDs led = new LEDs();
            for (int j = 0; j < 10; j++)
            {
                for (int i = 0; i < LEDs.Length; i++)
                {
                   led.Write(i,false);
                }
                Thread.Sleep(1000);

                for (int i = 0; i < LEDs.Length; i++)
                {
                    led.Write(i,true);
                    Thread.Sleep(400);
                }
            }
            for (int i = 0; i < LEDs.Length; i++)
                led.Write(i,false);
        }
    }
 1 
 2 
 3 LED列のオブジェクトを作る
 4 
 5 
 6 
 7 
 8 LED全消灯
 9 
10 1秒待つ
11 
12 
13 
14 一つずつ点灯する
15 400ms待つ
16 
17 
18 
19 LED全消灯
20 
21 




注意
 上記のプログラムにはクラスライブラリに関するusingの記述がありません。
何をしているかが理解できていれば、自明なものです。
 まずは、LEDなどのIOをコントロールしていますので、この参照が必要です。
つまり、

using RaspberryPiDotNet; 

が必要になります。

また、Thread.Sleep(); を使っているので、

using System.Threading; 

が必要になります。

注: System.Threading.Thread.Sleep();

とusing無しで書いても可能です。