查看: 854|回复: 2

[外翻] 按钮示例

[复制链接]

该用户从未签到

4

主题

20

积分

0

支持

IoT物联网技术组

Rank: 6Rank: 6

积分
20

发表于 2016-12-18 23:02:09 | 显示全部楼层 |阅读模式

马上注册,享受积分奖励和更多功能,让您轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
关于项目
在这个例子中,我们把按钮和LED灯连接到树莓派上。
V)ICLJJ6SSAMS(I5`G}YECI.png

项目信息
类      型: 说明;
难      度: 容易;
发布时间: 2015/5/1

项目材料
硬件:
LED灯1个
面包板1块
触觉按钮1个
330欧的电阻1个
树莓派2 B

组件
需要以下组件:
1个2代树莓派
1个EG1311-ND型触觉按钮
1个红LED灯
1个330欧电阻

连接器件到设备
依照下图开始在面包板上连接好各组件。
FY4A9F6X~T6N]YVYE(H461P.png
原理图:
@83LD5~@JVYSU4KG23_IK(L.png

连接LED灯
1、LED灯阴极(短脚)接到树莓派31号(GPIO 6)引脚;
2、LED灯阳极(长脚)接330欧电阻一端;
3、330欧电阻另一端接树莓派1号(3.3V)引脚。

连接按钮
1、按钮的一个引脚接树莓派的29号(GPIO 5)引脚;
2、按钮另一引脚接地。
树莓派2的引脚:
9`GH}UN6X5DK7XFVBE992CQ.png

创建并运行示例
1、下载MS-IOT样例压缩文件
2、在Visual Studio中打开文件samples-develop\PushButton\CS\PushButton.csproj;
3、为目标架构选择ARM;
4、选择Build -> Build Solution;
5、在调试目标中选择Remote Machine;
6、按F5部署和调试。输入设备的IP地址并选择身份验证类型为None。


代码
首先,我们打开我们将使用的GpioPin资源。 按钮连接到低电平有效配置的GPIO5,这意味着按钮未按下时,信号为高平;按下按钮时信号将变为低电平。将LED连接到GPIO6,这意味着驱动该引脚为高电平时LED灯灭,驱动该引脚为低电平时LED灯亮。
buttonPin = gpio.OpenPin(BUTTON_PIN);
ledPin = gpio.OpenPin(LED_PIN);ode>

首先将一个HIGH值锁存到GPIO6引脚上,以将LED初始化为OFF状态。 当将驱动模式更改为输出时,它会立即将锁存的输出值驱动到引脚上。 当最初打开一个引脚时,锁存的输出值是未定义的,因此应该将引脚设置为已知状态,然后再将其更改为输出。 记住,将LED的另一端连接到3.3V,因此需要将引脚驱动为低电平,使电流流入LED。
// Initialize LED to the OFF state by first writing a HIGH value
// We write HIGH because the LED is wired in a active low configuration
ledPin.Write(GpioPinValue.High);
ledPin.SetDriveMode(GpioPinDriveMode.Output);ode>

接下来,设置按钮引脚。 对于树莓派2,利用它内置的上拉电阻可以激活的事实。 我们使用内置上拉电阻,使我们不需要在外部提供电阻。
// Check if input pull-up resistors are supported
if (buttonPin.IsDriveModeSupported(GpioPinDriveMode.InputPullUp))
buttonPin.SetDriveMode(GpioPinDriveMode.InputPullUp)
else
buttonPin.SetDriveMode(GpioPinDriveMode.Input);ode>

接下来连接GPIO中断监听器。 这是每次引脚改变状态时都会调用的事件。 我们还将DebounceTimeout属性设置为50ms,以滤除由电噪声引起的杂散事件。 按钮是机械装置,并且可以在单个按钮按压上多次打开和断开接触。
// Set a debounce timeout to filter out switch bounce noise from a button press
buttonPin.DebounceTimeout = TimeSpan.FromMilliseconds(50);
// Register for the ValueChanged event so our buttonPin_ValueChanged
// function is called when the button is pressed
buttonPin.ValueChanged += buttonPin_ValueChanged;ode>

在按钮中断处理程序中,我们查看GPIO信号的边沿确定按钮是按下还是释放。 如果按下按钮,我们翻转LED的状态。
private void buttonPin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e)
{
// toggle the state of the LED every time the button is pressed
if (e.Edge == GpioPinEdge.FallingEdge)
{
ledPinValue = (ledPinValue == GpioPinValue.Low) ?
GpioPinValue.High : GpioPinValue.Low;
ledPin.Write(ledPinValue);
}ode>

我们还想用引脚的当前状态更新用户界面,因此我们在UI线程上调用更新操作。 在我们不想等待异步操作完成时,需要捕获局部变量中异步方法的结果以抑制编译器警告。
// need to invoke UI updates on the UI thread because this event
// handler gets invoked on a separate thread.
var task = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
if (e.Edge == GpioPinEdge.FallingEdge)
{
ledEllipse.Fill = (ledPinValue == GpioPinValue.Low) ?
redBrush : grayBrush;
GpioStatus.Text = "Button Pressed";
}
else
{
GpioStatus.Text = "Button Released";
}
});

每次按下按钮,都应该看到LED变化状态。


文章来源

签到天数: 161 天

连续签到: 2 天

[LV.7]常住居民III

14

主题

562

积分

1

支持

发表于 2016-12-18 23:17:33 来自手机 | 显示全部楼层
初中文化表示看不懂

来自:Lumia 650 Win10新机-智机社区客户端
[你知道吗]:

签到天数: 413 天

连续签到: 45 天

[LV.9]以坛为家II

25

主题

1412

积分

2

支持

发表于 2016-12-19 01:24:40 来自手机 | 显示全部楼层
求解释   

来自:Lumia 830 -智机社区客户端
[你知道吗]:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

         

网站地图| 小黑屋|京ICP证150706号|京B2-20160045| 京公网安备11010802018258号

Powered by Discuz! X3.2 / Copyright 2010-2017 © 智机网 WFUN.COM Inc. All rights reserved.

快速回复 返回顶部 返回列表