感觉又帮 Windows 10 IoT 开荒了,所以呢,正儿八经的写篇博客吧。其实大概半年前就想写的,那时候想做个基于 Windows 10 IoT 的小车,但树莓派原生不支持 PWM 啊。百度也搜不到,上 GitHub 转了一圈,在 @ms-iot 那发现了 Lightning ,再看最后的更新时间,还是2016中旬……Windows 10 IoT 在国内真惨,这么长时间都没人写个教程……不说废话了……

  本文示例地址:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/RgbLed

  Lightning 项目地址:https://github.com/ms-iot/lightning

  效果图:

  一、 更改默认控制器驱动

  打开树莓派的 Windows Device Portal ,在 Devices 菜单中的 Default Controller Driver 选项,将默认的 Inbox Driver 更改为 Direct Memory Mapped Driver ,重启。

  二、更改 Package.appxmanifest 配置

  新建一个 UWP 项目,本文这里叫“RgbLedDemo”。以“查看代码”的形式打开 Package.appxmanifest 。

  在 Package 标签下添加一个命名空间,并更改 IgnorableNamespaces 属性。

xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10"
IgnorableNamespaces="uap mp iot"

  在 Capabilities 添加如下内容

<iot:Capability Name="lowLevelDevices" />
<DeviceCapability Name="109b86ad-f53d-4b76-aa5f-821e2ddf2141"/>

  三、引用 Microsoft.Iot.Lightning

  在 NuGet 包管理器下搜索 Lightning 即可。

  还有 Windows IoT Extensions for the UWP

  四、使用 Lightning

  注意引用

using Windows.Devices.Pwm;
using Microsoft.IoT.Lightning.Providers;

  1. 判断 Lightning 的启用

  这一步是必要的,因为使用 Lightning 必须关闭系统默认的控制器驱动,没启用的话抛出个异常就好了。

if (!LightningProvider.IsLightningEnabled)
{
throw new NullReferenceException("Lightning isn't enabled !");
}

  2. 获取软件 PWM 控制器

  一切正常的情况下就该获取 Lightning 中的软件 PWM 控制器了。Lightning 中也集成了其他硬件 PWM 的控制器,因此在调用 PwmController.GetControllersAsync() 时返回的是一个集合,其中第二项是我们需要的软件 PWM 控制器。得到控制器后还需要设置 PWM 的频率,这个软件 PWM 控制器的频率范围在 40 - 1000 Hz 之间(低的可怜……),不在这个范围内的数字会抛出异常。

PwmController controller = (await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider()))[];
controller.SetDesiredFrequency(1000);

  3. 设置 PWM 引脚

  以 Red 引脚为例。首先通过控制器来打开引脚,这里为 GPIO 17 位置的引脚。然后需要设置 Duty Cycle Percentage ,通俗点就是电压的占比,0 - 1 之间的小数。

PwmPin redPin = controller.OpenPin();
redPin.SetActiveDutyCyclePercentage();
redPin.Start();

  之后要改变 LED 的亮度还是要改变 SetActiveDutyCyclePercentage(value) 的 value 值。

  释放的话要先关闭 PWM。

redPin.Stop();
redPin.Dispose();

  五、注意

  使用 Lightning 后,之前基于默认控制器驱动编写的I2C,SPI代码会报错。但 Lightning 中集成了 I2C、SPI、GPIO 等的控制器,将其替换一下即可。

  本文的项目解析部分就结束了。下面给一个呼吸灯的测试代码,我用的是共阴极 RGB LED 。代码在 GitHub 的项目中有。

/// <summary>
/// Breathing LED
/// </summary>
/// <param name="delay">Delay Time</param>
public async Task BreathingAsync(int delay)
{
double red = ;
double green = ;
double blue = ; while (red != && green != )
{
redPin.SetActiveDutyCyclePercentage(red / 255.0);
greenPin.SetActiveDutyCyclePercentage(green / 255.0); red--;
green++;
await Task.Delay(delay);
} while (green != && blue != )
{
greenPin.SetActiveDutyCyclePercentage(green / 255.0);
bluePin.SetActiveDutyCyclePercentage(blue / 255.0); green--;
blue++;
await Task.Delay(delay);
} while (blue != && red != )
{
bluePin.SetActiveDutyCyclePercentage(blue / 255.0);
redPin.SetActiveDutyCyclePercentage(red / 255.0); blue--;
red++;
await Task.Delay(delay);
}
}

张高兴的 Windows 10 IoT 开发笔记:使用 Lightning 中的软件 PWM 驱动 RGB LED的更多相关文章

  1. 张高兴的 Windows 10 IoT 开发笔记:使用 ADS1115 读取模拟信号

    考虑到 Raspberry Pi 读取模拟信号是很烦人的事情,更何况是在没人玩的 Windows 10 IoT 下,所以准备正儿八经的写点东西. 需求:使用 Raspberry Pi 读取输出模拟信号 ...

  2. 张高兴的 Windows 10 IoT 开发笔记:HC-SR04 超声波测距模块

    HC-SR04 采用 IO 触发测距.下面介绍一下其在 Windows 10 IoT Core 环境下的用法. 项目运行在 Raspberry Pi 2/3 上,使用 C# 进行编码. 1. 准备 H ...

  3. 张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器

    BH1750FVI 是一款 IIC 接口的数字型光强度传感器集成电路.下面介绍一下其在 Windows 10 IoT Core 环境下的用法. 项目运行在 Raspberry Pi 2/3 上,使用 ...

  4. 张高兴的 Windows 10 IoT 开发笔记:部署 ASP.NET Core 2 应用

    今天是大年初二,都去走亲戚了吧,享受一下这难得的能和亲友相聚的时光.而我就不一样了,今天一回到家就又开始瞎折腾了,哈哈哈. 问题背景 最近花了点时间用 ASP.NET Core 2 写了个个人博客,中 ...

  5. 张高兴的 Windows 10 IoT 开发笔记:串口红外编解码模块 YS-IRTM

    This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub: https://github.c ...

  6. 张高兴的 Windows 10 IoT 开发笔记:无线收发芯片 nRF24L01

    This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...

  7. 张高兴的 Windows 10 IoT 开发笔记:FM 电台模块 KT0803L

    This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...

  8. 张高兴的 Windows 10 IoT 开发笔记:0.96 寸 I2C OLED

    This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...

  9. 张高兴的 Windows 10 IoT 开发笔记:使用 MAX7219 驱动数码管

    This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...

随机推荐

  1. HTML+CSS画一朵向日葵

    前几天看到一张图片,倔强的向日葵.(BGM,<倔强>) 看着挺有感触,就想用CSS做一个向日葵. 最终效果图如下: 主要的难点就在花瓣的处理上,css暂时没有做到这样的尖角圆弧. 我想到的 ...

  2. java.lang.reflect.MalformedParameterizedTypeException异常问题

    做dubbo框架集成的时候,出现的问题,本来的原来的工程没有错误,引入dubbo后报错,原因是spring的jar文件冲突,我用的spring是4.x,dubbo引入的是2.5所以需要去掉,相关的po ...

  3. JavaScript实现省市联动

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  4. 慕课网视频破解付费分享-前端开发-Python等

    微信小程序 慕课网   BAT大牛经验总结全面深入解读Android面试   前端JS基础面试技巧   vue2.0+node.js+mongodb全栈打造商城   Vue.js高级实战-开发移动端音 ...

  5. positio:absolute与position:relative的区别

    absolute 能让元素 inline-block 化:例如一个div标签默认宽度是100%显示的,但是一旦被absolute属性缠上,则100%默认宽度就会变成自适应内部元素的宽度. float ...

  6. javaScript数组去重方法

    在JAvascript平时项目开发中经常会用到数组去重的操作.这时候就要用到JS数组去重的方法了. demo1: 第一种:JS数组去重操作方法是利用遍历原数组,利用数组的indexOf()方法来来判断 ...

  7. 201521123066《Java程序设计》第五周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 1代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪 ...

  8. 201521123115 《Java程序设计》第3周学习总结

    Java 第三周总结 1.本周学习总结 {{uploading-image-747934.png(uploading...)}} 2.书面作业 1.代码阅读 public class Test1 { ...

  9. 201521123121 《Java程序设计》第1周学习总结

    1. 本周学习总结 我们将要重点接触的JAVA SE主要分为4个部分:JVM.JRE.JDK.java语言. 其中JVM作为运行虚拟机隶属于JRE运行环境中,是JAVA通用性.跨平台适应性高的基础保证 ...

  10. 史上最全CentOS安装教程,图文结合

    这是我最近整理的一份最全的CentOS安装步骤,亲自测试步骤,步步都有截图,步骤清晰.按此教程可轻松装机,并且安装成功的主机能访问外部网络. 闲话不说,首先介绍一下本教程用到工具: VMware Wo ...