转载

Windows 10 IoT开发:干簧管控制的小灯(树莓派3)

干簧管是一种可以用磁场控制开关状态的设备。当有磁场时,玻璃管中的两片铁片会贴合,从而导电。干簧管模块也就是基于这个原理的电子模块,有磁场时,输出低电平。

干簧管的应用:

门口灯光:当你开门时,亮灯,关门时熄灯。只需要在门锁上装个干簧管,在门框上装个磁铁就能搞定。

当然,装在门上做防盗报警设备。

还有类似的很多应用场景。这篇文章讨论的就是类似第一种的灯光控制场景,不过并不是有磁场开灯,没磁场关灯,而是检测到磁场时开灯,再次检测到磁场时关灯。并没有什么卵用,只是写给Windows 10 IoT初学者看的起步例子。

一、物理连接:

干簧管端VCC接DC3.3, GND接GROUND, DO接GPIO 05

LED正极接DC3.3, 负极接GPIO 06

Windows 10 IoT开发:干簧管控制的小灯(树莓派3)

二、爆代码

定义GPIO控制器、干簧管的GPIO端口、LED灯的GPIO端口、LED的开关标志

public GpioController GpioController { get; set; }  public GpioPin ReedPin { get; set; }  public GpioPin LedPin { get; set; }  public bool IsLightOn { get; set; }

初始化GPIO控制器

GpioController = GpioController.GetDefault(); if (null != GpioController) {  }

记住,Windows 10 IoT设备最好判做一下非空的判断,以保证代码在没有GPIO控制器的设备上不会爆。

打开干簧管GPIO端口

ReedPin = GpioController.OpenPin(5);

设置端口模式为输入(因为我们要监听干簧管输出的信号)

ReedPin.SetDriveMode(GpioPinDriveMode.Input);

类似的,打开LED的GPIO端口,并设置端口模式为输出。开灯是输出低电平,关灯是输出高电平。

LedPin = GpioController.OpenPin(6);  LedPin.SetDriveMode(GpioPinDriveMode.Output);

LED一开始是熄灭的,所以先输出一个高电平

LedPin.Write(GpioPinValue.High);

然后,当干簧管的端口电平变化的时候,爆一个事件出来:

ReedPin.ValueChanged += (sender, args) => {  };

在这个事件里,判断干簧管当前电平是否为低电平,如果是的话,证明遇到了磁场,控制LED的开关:

if (ReedPin.Read() == GpioPinValue.Low) {     IsLightOn = !IsLightOn;      LedPin.Write(IsLightOn ? GpioPinValue.Low : GpioPinValue.High); }

最后,整个代码看起来就像这样:

using Windows.Devices.Gpio; using Windows.UI.Xaml.Controls;  namespace WindowsIoTReedLight {     public sealed partial class MainPage : Page     {         public GpioController GpioController { get; set; }          public GpioPin ReedPin { get; set; }          public GpioPin LedPin { get; set; }          public bool IsLightOn { get; set; }          public MainPage()         {             this.InitializeComponent();              GpioController = GpioController.GetDefault();             if (null != GpioController)             {                 ReedPin = GpioController.OpenPin(5);                 ReedPin.SetDriveMode(GpioPinDriveMode.Input);                 ReedPin.ValueChanged += (sender, args) =>                 {                     if (ReedPin.Read() == GpioPinValue.Low)                     {                         IsLightOn = !IsLightOn;                          LedPin.Write(IsLightOn ? GpioPinValue.Low : GpioPinValue.High);                     }                 };                  LedPin = GpioController.OpenPin(6);                 LedPin.SetDriveMode(GpioPinDriveMode.Output);                 LedPin.Write(GpioPinValue.High);             }         }     } }

三、运行

部署工程到树莓派上,然后拿块磁铁靠近干簧管,灯亮,再次靠近,灯灭。

Windows 10 IoT开发:干簧管控制的小灯(树莓派3)

原文  http://edi.wang/post/2016/5/1/windows-10-iot-reed-light-control
正文到此结束
Loading...