根据上一章我们所实现的电灯程序,我们花一点时间来分析一下在这个案例中,‘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);