在这个项目中,你将学习如何从数字I/O引脚中读出,使用digitalRead() 功能。
Arduino Uno板上的数字I/O引脚是在板子的USB端口一侧的引脚,它们也可能在引脚上被标记为数字,就像我的情况一样。

它们的编号从0 到13 ,但你几乎总是跳过引脚0 和1 ,除非你的引脚用完了,因为它们是用来进行串行通信的(见印在它们上面的rx 和tx 标签)。
我们首先建立电路,然后切换到电脑上的Arduino IDE。
电路将是简单的。我们将有一个按钮,它的一条导线连接到Arduino的GND,一条导线连接到数字引脚#3(任何其他数字引脚都可以)。


我们将每秒钟检测3号引脚的电压水平。我们将引脚号码定义为常数,以避免在我们的代码中出现一个神奇的数字。
#define BUTTON_PIN 3
在setup() 函数中,我们调用pinMode()将该引脚设置为输入引脚,并加入INPUT_PULLUP 选项。
pinMode(BUTTON_PIN, INPUT_PULLUP);
之所以需要INPUT_PULLUP ,是因为在默认情况下,如果没有任何东西连接到该引脚(如果没有点击按钮,电路是开放的,就像没有任何东西连接到该引脚一样),输入引脚是浮动的,这意味着它受到干扰,它可以随机选择一个0或1。
在电路中,我们可以添加一个上拉或下拉电阻,但把INPUT_PULLUP 标志传递给Arduino更容易。如果没有连接任何东西,它默认为1。
然后在loop() 函数中,我们用digitalRead() 函数得到输入引脚的值。
int value = digitalRead(BUTTON_PIN);
这个值可以是0或1,取决于输入的情况。
如果按钮被按下,Arduino将检测到0。
如果按钮没有被按下,Arduino将检测到1。
你也可以使用常数LOW ,它映射到0,而HIGH ,它映射到1。
这个值可以被打印到串行输出,就像在这个程序中。
#define BUTTON_PIN 3
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int value = digitalRead(BUTTON_PIN);
Serial.print(value);
delay(1000);
}
保存并上传程序到Arduino,然后在Arduino IDE中点击右上方的 "串行监控 "按钮。

它将显示串行接口监视器。确保它在底部调到9600波特,你应该看到一串1 ,直到你按下按钮一秒钟,这时你应该得到一个0 。

我们还可以点亮一个LED。我们可以把它添加到电路中,但我们也可以使用Arduino Uno内置的LED,它映射到数字I/O引脚#13。我们可以用这种方式写一个程序。
#define BUTTON_PIN 3
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
}
void loop() {
int value = digitalRead(BUTTON_PIN);
digitalWrite(13, value);
}
来立即反映按钮的输入值,而不需要等待1秒钟。以前我们这样做是为了避免向串行接口写入太多的值,使其无法管理。
看到了吗?当程序开始时,内置的LED(靠近顶部的13号针脚/GND)亮起,当我们按下按钮时,它就会关闭


你也可以做相反的事情(保持关闭,只在我们按下按钮的时候打开),用
digitalWrite(13, !value);
而不是参考神奇的数字13 ,你可以使用内置的常数LED_BUILTIN 。
#define BUTTON_PIN 3
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
}
void loop() {
int value = digitalRead(BUTTON_PIN);
digitalWrite(LED_BUILTIN, !value);
}