按钮示例

北极****.1 UID.2866492
2016-12-18 发表

关于项目
在这个例子中,我们把按钮和LED灯连接到树莓派上。
***附件停止解析***

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

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

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

连接器件到设备
依照下图开始在面包板上连接好各组件。
***附件停止解析***
原理图:
***附件停止解析***

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

连接按钮
1、按钮的一个引脚接树莓派的29号(GPIO 5)引脚;
2、按钮另一引脚接地。
树莓派2的引脚:
***附件停止解析***

创建并运行示例
1、***链接停止解析***;
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变化状态。


***链接停止解析***

敬告:
为防止不可控的内容风险,本站已关闭新用户注册,新贴的发表及评论;
你现在看到的内容只是互联网用户曾经发表的言论快照,仅用于老用户留存纪念,且仅与科技行业相关,全部内容不代表本站观点及立场;
本站重新开放前已针对包括用户隐私、版权保护、信息安全、国家政策在内的各种互联网法律法规要求,执行了隐患内容的自查、屏蔽和删除;
本站目前所属个人主体,未有任何盈利安排与计划,且与原WFUN.COM所属公司不存在任何关联关系;
如果本帖内容或者相关资源侵犯到您的合法权益,或者您认为存在问题,那么请您务必点此举报或投诉!
全部回复:
丑****怪 UID.2863886
2016-12-18 使用 Lumia 650 回复

初中文化表示看不懂{:6_218:}{:6_218:}

轻吻你的唇 UID.2854736
2016-12-19 使用 Lumia 830 回复

求解释

本站使用Golang构建,点击此处申请开源鄂ICP备18029942号-4联系站长投诉/举报