LEDチカチカ

演算子オーバーライド

LEDチカチカは準備のところで行いました。ここではちょっと違った方法でチカチカさせてみます。デジタル信号のON/OFFですから、OutputPortクラスのWriteメソッドを使うのは当たり前なのですが、演算子オーバーライドを使ってみます。本当は=演算子をオーバーライドさせたいのですが、C#では出来ないので、<<演算子を利用して<<=矢印のように表示できると分かりやすいかもしれませんので、これを採用してみます。

演算子オーバーライド
using System;
using System.Threading;         // 追加
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;  // 追加、参照設定にも追加
using GHI.OSHW.Hardware;        // 追加、参照設定にも追加
using GHI.Hardware.FEZCerb;     // 追加、参照設定にも追加
using BoeBotLib;
using Pin = GHI.Hardware.FEZCerb.Pin;

namespace LED
{
    public class Program
    {
        public static void Main()
        {
           DigitalOut LED1 = new DigitalOut(Pin.PC0, false);
           int count = 0;
            while (true)
            {
                Debug.Print("Hello World " + count++);
                LED1 <<= 1;
                Thread.Sleep(500);
                LED1 <<= 0;
                Thread.Sleep(500);
            }
        }
    }

    public class DigitalOut : OutputPort
    {
        public DigitalOut(Cpu.Pin pin, bool state)
            : base(pin, state)
        { 
        }

        public static DigitalOut operator <<(DigitalOut obj, int state)
        {
            obj.Write(state==0 ? false:true);
            return obj;
        }
    }
}
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 エイリアス
 9 
10 
11 
12 
13 
14 
15 DigitalOutは<<演算子を持つ
16 OutputPortクラス。Pin.PC0は
17 GHI.Hardware.FEZCerb.Pin.PC0
18 の省略形(エイリアス)
19 
20 
21 LED1に1を出力させると読む
22 
23 LED1に0を出力させると読む
24 
25 
26 
27 
28 
29 OutputPortクラスを親に持つ
30 
31 
32 コンストラクタは親に丸投げ
33 
34 
35 
36 <<演算子のオーバーライド
37 従って<<=演算子も持つ
38 
39 
40 
41 
42