下图是一个没有使用上拉电阻/下拉电阻的电路图:ui
在按键没有按下时,要读取的输入引脚没有链接到任何东西,这种状态就称为“悬空”。spa
因为附近引脚的电气噪声,从处于“悬空”状态的输入引脚读取到的数值会在高电平和低电平之间来回波动,获得一个不肯定的值。3d
若是用串口监视器将 在没有使用上拉/下拉电阻的状况下 从一个数字引脚读取的输入打印出来,会获得图示的结果:code
能够看到此时读取到的输入并非一个肯定的值。blog
若是换成从模拟引脚读取输入能够更明显地看到输入电压值的波动状况:class
只有输入时要考虑上拉电阻和下拉电阻的问题,输出时不用考虑。原理
上拉电阻:将输入引脚经过一个10kΩ的电阻上拉到电源上im
电路原理图:db
在串口监视器中打印出的结果为:img
使用Arduino I/O口内部上拉功能:
ATmega328P 每一个I/O端口都内置了20kΩ上拉电阻(包括数字引脚和模拟输入引脚)(注意:没有内置下拉电阻)。
电路链接:
将按钮的一端接到GND,另外一端接到输入引脚(这里是D2),如图所示:
代码:
void setup{ ... pinMode(2,INPUT_PULLUP); ... }
下拉电阻:将输入引脚经过一个10kΩ的电阻下拉到地
电路原理图: