## 数字引脚上拉电阻
> 本例向你展示**pinMode**函数中**INPUT_PULLUP**常量的使用。本例通过Arduino板和电脑间的串口连接来监视按键的状态。当按键输入值为HIGH时,板载LED将被打开。当按键输入值为LOW时,板载LED将被关闭。
### 所需硬件
* Arduino板
* 记忆开关,按键或拨动开关
* 面包板
* 面包板跳线
* 杜邦线/面包板连接线
### 电路
将两根线连到板子上:黑色线连接按键和GND。另一根线从2号引脚链接到按键的另外一脚。
按键或者开关将在被按下时连通两侧。当按键处于开路时(未按下),按键两侧并不会有连接。因为2号引脚上的上拉电阻被激活并连接到了5V,所以当按键被松开时我们读到HIGH。而当按键按下时我们读到LOW,因为此时线路被完全连接到GND。
![图片来自官网](http://img.blog.csdn.net/20160424105305480)
### 原理图
![图片来自官网](http://img.blog.csdn.net/20160424105323297)
### 代码
在下列程序中,setup函数用以下代码初始化串口连接(波特率9600):
~~~
Serial.begin(9600);
~~~
接着,初始化2号引脚为输入模式,并且使用内部上拉电阻:
~~~
pinMode(2,INPUT_PULLUP);
~~~
接下来的代码初始化13号引脚为输出模式 :
~~~
pinMode(13, OUTPUT);
~~~
好的,setup函数已经写完,开始写loop函数了。当按键没有被按下时,内部上拉电阻连接到5V,这使得Arduino读出**HIGH**(数值1)。而当按键被按下的时候,Arduino的引脚被”拉向”**GND**,因而Arduino读出**LOW**(数值0)。
在主循环你所要做的第一件事情就是声明一个变量来存储按键的状态。由于按键返回的值只可能是0或1,因而用**Int**类型正合适。将变量命名为**sensorValue**,并且让它和按键状态保持一致。以下代码可以轻松做到:
~~~
int sensorValue = digitalRead(2);
~~~
一旦Arduino读取到了输入,就将值(应是一个十进制数)输出到电脑。你可以在最后一行添加**Serial.println()**函数:
~~~
Serial.println(sensorValue, DEC);
~~~
现在,打开Arduino IDE上的串口监视器。按键按下,你可以看到一列稳定的“0”。如果按键被松开,则应看到“1”。
与13引脚连接的板载LED将在按键返回HIGH时打开,在返回LOW时关闭。
~~~
/*
数字引脚上拉电阻
本例向你展示pinMode函数中INPUT_PULLUP常量的使用。本例将会读取2号引脚上的数字输入,然后输出到串口监视器。
电路连接:
* 记忆开关连接2号到GND
* 13引脚连LED
不像pinMode(INPUT), 这里不需要下拉电阻。20kΩ电阻将电压上拉到5V。这种配置使得按键被松开时返回HIGH,按键被按下时返回LOW。
代码是公开的
*/
void setup() {
//打开串口连接
Serial.begin(9600);
//配置2号引脚为输入引脚,并且开启上拉电阻
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
}
void loop() {
//读取按键的值并存入变量
int sensorVal = digitalRead(2);
//输出按键的值
Serial.println(sensorVal);
// 记住,使用了上拉电阻就意味着按键的使用逻辑反过来了。
// 在松开时返回HIGH,按下时返回LOW。
//在按键按下点亮13号引脚上的LED,在松开时熄灭:
if (sensorVal == HIGH) {
digitalWrite(13, LOW);
} else {
digitalWrite(13, HIGH);
}
}
~~~
### 相关资料
[setup()](http://www.arduino.cc/en/Reference/Setup)
[loop()](http://www.arduino.cc/en/Reference/Loop)
[pinMode()](http://www.arduino.cc/en/Reference/PinMode)
[digitalRead()](http://www.arduino.cc/en/Reference/DigitalRead)
[delay()](http://www.arduino.cc/en/Reference/Delay)
[int](http://www.arduino.cc/en/Reference/Int)
[serial](http://www.arduino.cc/en/Reference/Serial)
[DigitalPins](http://www.arduino.cc/en/Tutorial/DigitalPins)
- 说明
- 系统示例文件目录结构及说明
- 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