## 按键
> 在被按下时按键(或开关)两端被连通。本例向你展示如何在按键按下时打开13号引脚的LED。
### 所需硬件
* Arduino板Genuino板
* 自锁按钮或开关或按键
* 10KΩ电阻
* 面包板跳线
* 面包板
### 电路
![图片来自官网](http://img.blog.csdn.net/20160420125144764)
用到三根线。红色和黑色的线分别连接到面包板两侧竖直的两排接口,以此扩展多个5V和GND的接口(红色一排->红色线->5V 蓝色一排->黑色线->GND)。第三根线从2号引脚连接到按键右上侧,按键右下侧引脚连接到一个下拉电阻(这里用10kΩ电阻),然后将下拉电阻接到GND。按键左下侧接到5V。
> 译者注:原文中说的确实是按钮,可是一会儿说按键、一会儿说自锁按钮。当然上面还提到了“开关”。各种按钮都大同小异,读者只需买自己喜欢的按钮就好。当然用小开关也行,按钮和开关没有原理上的巨大区别。
按键或者开关将在被按下时连通两侧。当按键处于开路时(未按下),按键两侧并不会有连接。Arduino引脚这时连接的是GND(通过下拉电阻),代码中读出来就是LOW(数值0)。当按键处在闭路时(按下),两端连通,因而Arduino引脚就会被连接到5V,代码中读出来就是HIGH(数值1)。
你也可以用不同方法构造电路:使用**上拉电阻**让输入保持**高电平**(读出HIGH),如此,在按键按下时就变低电平(读出LOW)。如果这样连接,那么LED行为就会和上面所介绍的相反。即LED常亮,按下按键的时候熄灭。
如果你将数字引脚悬空(没接下拉电阻),LED可能会不规律的闪烁。这是因为此时Arduino引脚的输入一直在”漂移”。就是说,程序不能判定它是高电压还是低电压,故而只会随机的返回HIGH或LOW。这解释了这里我们为何需要下拉电阻。
### 原理图
![这里写图片描述](http://img.blog.csdn.net/20160420125203352)
### 代码
~~~
/*
按键
当与2号引脚连接的按键按下时,将与13号引脚连接的LED点亮
电路连接:
* 13号引脚连LED
* 按键从2号引脚连接到+5V接口
* 10K resistor从2号引脚连接到GND
* 注意:大多数Arduino在13引脚已经有了一个板载LED。
代码是公开的
*/
// int型常量,用来定义按键引脚:
const int buttonPin = 2; // 按键引脚
const int ledPin = 13; // LED引脚
//变量声明、定义:
int buttonState = 0; // 记录按键状态的变量
void setup() {
// 定义ledPin引脚为输出模式:
pinMode(ledPin, OUTPUT);
// 定义pushbutton引脚为输入模式:
pinMode(buttonPin, INPUT);
}
void loop() {
// 读取按键的值:
buttonState = digitalRead(buttonPin);
// 检查按键是否被按下
// 按下的话buttonState将为HIGH:
if (buttonState == HIGH) {
// 打开LED:
digitalWrite(ledPin, HIGH);
} else {
// 关闭LED:
digitalWrite(ledPin, LOW);
}
}
~~~
## 相关资料
[pinMode()](http://www.arduino.cc/en/Reference/PinMode)
[digitalWrite()](http://www.arduino.cc/en/Reference/DigitalWrite)
[digitalRead()](http://www.arduino.cc/en/Reference/DigitalRead)
[if](http://www.arduino.cc/en/Reference/If)
[else](http://www.arduino.cc/en/Reference/Else)
- 说明
- 系统示例文件目录结构及说明
- 01.Basics
- AnalogReadSerial
- BareMinimum
- Blink
- DigitalReadSerial
- Fade
- ReadAnalogVoltage
- 02.Digital
- BlinkWithoutDelay
- Button
- Debounce
- DigitalInputPullup
- StateChangeDetection
- toneKeyboard
- toneMelody
- toneMultiple
- tonePitchFollower
- 03.Analog
- AnalogInOutSerial
- AnalogInput
- AnalogWriteMega
- Calibration
- Fading
- Smoothing
- 04.Communication
- ASCIITable
- Dimmer
- Graph
- Midi
- MultiSerial
- PhysicalPixel
- ReadASCIIString
- SerialCallResponse
- SerialCallResponseASCII
- SerialEvent
- SerialPassthrough
- VirtualColorMixer
- 05.Control
- Arrays
- ForLoopIteration
- IfStatementConditional
- switchCase
- switchCase2
- WhileStatementConditional
- 06.Sensors
- ADXL3xx
- Knock
- Memsic2125
- Ping
- 07.Display
- barGraph
- RowColumnScanning
- 08.Strings
- CharacterAnalysis
- StringAdditionOperator
- StringAppendOperator
- StringCaseChanges
- StringCharacters
- StringComparisonOperators
- StringConstructors
- StringIndexOf
- StringLength
- StringLengthTrim
- StringReplace
- StringStartsWithEndsWith
- StringSubstring
- StringToInt
- 09.USB
- Keyboard
- KeyboardLogout
- KeyboardMessage
- KeyboardReprogram
- KeyboardSerial
- KeyboardAndMouseControl
- Mouse
- ButtonMouseControl
- JoystickMouseControl
- 10.StarterKit_BasicKit (与特定硬件相关,暂无)
- p02_SpaceshipInterface
- p03_LoveOMeter
- p04_ColorMixingLamp
- p05_ServoMoodIndicator
- p06_LightTheremin
- p07_Keyboard
- p08_DigitalHourglass
- p09_MotorizedPinwheel
- p10_Zoetrope
- p11_CrystalBall
- p12_KnockLock
- p13_TouchSensorLamp
- p14_TweakTheArduinoLogo
- p15_HackingButtons
- 11.ArduinoISP(暂无)
- ArduinoISP