410c與MS10物聯網系統的點燈代碼分析

根據上一章我們所實現的電燈程序,我們花一點時間來分析一下在這個案例中,‘Tick’事件如何調用並反轉LED。

時間模型

如下的代碼爲410c中所設置的C#代碼:

public MainPage()
{
    // ...

    timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromMilliseconds(500);
    timer.Tick += Timer_Tick;
    InitGPIO();
    if (pin != null)
    {
        timer.Start();
    }

    // ...
}

private void Timer_Tick(object sender, object e)
{
    if (pinValue == GpioPinValue.High)
    {
        pinValue = GpioPinValue.Low;
        pin.Write(pinValue);
        LED.Fill = redBrush;
    }
    else
    {
        pinValue = GpioPinValue.High;
        pin.Write(pinValue);
        LED.Fill = grayBrush;
    }
}

初始化GPIO口

爲了驅動GPIO口,首先我們要懂得如何初始化。 如下爲C#代碼

using Windows.Devices.Gpio;

private void InitGPIO()
{
    var gpio = GpioController.GetDefault();

    // Show an error if there is no GPIO controller
    if (gpio == null)
    {
        pin = null;
        GpioStatus.Text = "There is no GPIO controller on this device.";
        return;
    }

    pin = gpio.OpenPin(LED_PIN);
    pinValue = GpioPinValue.High;
    pin.Write(pinValue);
    pin.SetDriveMode(GpioPinDriveMode.Output);

    GpioStatus.Text = "GPIO pin initialized correctly.";

}

我們一步步的分析上面的代碼:
 首先,我們使用GpioController.GetDefault() 來獲得GPIO控制
 如果設備沒有對GPIO的控制權,那麼函數將返回null
 接下來我們試圖通過調用GpioController.OpenPin() 來更改LED_PIN的值
 當我們能夠控制Pin的值後,我們使用函數 GpioPin.Write() 來設置輸出電平爲高
 我們接下來使用 GpioPin.SetDriveMode() 來設置輸出模式下的pin值

修改GPIO口的狀態
當我們訪問 實例時,沒必要更改pin的狀態從而控制LED的亮滅
如果我們需要將LED打開,我們只需要簡單的寫入值 到IO口中:

pin.Write(GpioPinValue.Low);

舉一反三,我們也可以通過如下的方式將IO口設置爲高:

pin.Write(GpioPinValue.High);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章