内部上拉电阻
本课属于 Coddy Arduino 学习旅程的“输入”单元。第 3 课,共 22 课。
从“读取按钮”这一课开始,你一直在使用 INPUT_PULLUP。它会接通电路板内部的一个电阻,阻值为 20k 到 50k 欧姆,连接引脚和 5V:它的作用与上一课中的下拉电阻相反,而且不需要额外的元件。按钮只会将引脚连接到 GND。
问题在于逻辑是反过来的:未按下时读数为 HIGH,按下时读数为 LOW,在整个程序中使用 == LOW 很容易弄反。像 digitalRead(2) == LOW 这样的比较表达式本身的值是 true 或 false,而 bool 是一种用于保存 true 或 false 的变量。用一个能说明其含义的名称来保存它:
bool pressed = digitalRead(2) == LOW;
if (pressed) {
// 按钮已按下
}这样一来,代码读起来就符合直觉了。打印 bool 时,true 会显示为 1,false 会显示为 0。
挑战
简单按钮将引脚 2 接到 GND,LED 接在引脚 13 上:
- 将引脚 2 设为
INPUT_PULLUP - 将
digitalRead(buttonPin) == LOW存入名为pressed的bool中 - 输出
pressed,当它为true时点亮 LED,然后等待 100 ms
按住按钮时,“检查”预期输出 1,松开按钮时预期输出 0。点击“运行”,按住按钮,然后点击“检查”。
亲手试试
const int buttonPin = 2;
const int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
// 启用按钮引脚的上拉电阻
}
void loop() {
// bool pressed = ...
// 打印它的值,值为 true 时点亮 LED,等待 100 ms
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
输入中的所有课
自己练习: Arduino 在线编辑器