根據上一章我們所實現的電燈程序,我們花一點時間來分析一下在這個案例中,‘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);