Arduino项目:如何读取一个数字输入

275 阅读3分钟

在这个项目中,你将学习如何从数字I/O引脚中读出,使用digitalRead() 功能。

Arduino Uno板上的数字I/O引脚是在板子的USB端口一侧的引脚,它们也可能在引脚上被标记为数字,就像我的情况一样。

它们的编号从013 ,但你几乎总是跳过引脚01 ,除非你的引脚用完了,因为它们是用来进行串行通信的(见印在它们上面的rxtx 标签)。

我们首先建立电路,然后切换到电脑上的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);
}