引脚悬空
先看一段代码
void setup() {
Serial.begin(9600);
pinMode(2,INPUT);
}
void loop() {
Serial.println(digitalRead(8));
delay(500);
}
并简单连接电路
此时不触碰开关和7引脚,串口会打印高电平还是低电平呢?
可以看到输出结果是随机值,1高电平 0低电平,一直变化
这是因为pinMode
设置为 INPUT
后电阻极大,外部微小的电流变化比如相邻引脚的电流都会影响读取的点平
我们希望不触碰时能稳定在某个电平,此时就需要 上拉下拉电阻 的介入
上拉电阻
顾名思义,上拉电阻将引脚上拉到高电平
10kΩ 的电阻称为上拉电阻,目的是保护电路
开关断开时 5V 直接与引脚相连,此时引脚读取到的是高电平
开关按下后,引脚被短路,5V直接接地,此时引脚读取到的是低电平
实物图:
下拉电阻
同理,将引脚接地
开关断开时为低电平
开关闭合时为高电平
实物图:
内置上拉电阻
Arduino自带内置上拉电阻,不用像上面那样自己搭建,直接在代码中开启即可
pinMode(pin,INPUT_PULLUP);
此时引脚读取的为高电平
若需要读取低电平,外置一个变量赋值digitalRead
后逻辑取反 ! 即得到低电平