Arduino - I/O 函数

Arduino 板上的引脚可以配置为输入或输出。我们将解释这些模式下引脚的功能。需要注意的是,大多数 Arduino 模拟引脚的配置和使用方式与数字引脚完全相同。

配置为输入的引脚

Arduino 引脚默认配置为输入,因此当您将它们用作输入时,无需使用 pinMode() 明确声明为输入。以这种方式配置的引脚被称为处于高阻抗状态。输入引脚对它们正在采样的电路的要求极小,相当于引脚前面的 100 兆欧串联电阻。

这意味着将输入引脚从一种状态切换到另一种状态所需的电流非常小。这使得引脚可用于实现电容式触摸传感器或将 LED 读取为光电二极管等任务。

配置为 pinMode(pin, INPUT) 的引脚,如果未连接任何设备,或者连接的电线未连接到其他电路,则报告引脚状态看似随机的变化,从环境中拾取电气噪声,或电容耦合附近引脚的状态。

上拉电阻

如果没有输入,上拉电阻通常可用于将输入引脚引导至已知状态。这可以通过在输入端添加上拉电阻(至 +5V)或下拉电阻(电阻接地)来实现。 10K 电阻是上拉或下拉电阻的合适值。

使用内置上拉电阻,引脚配置为输入

Atmega 芯片内置有 20,000 个上拉电阻,可通过软件访问。通过将 pinMode() 设置为 INPUT_PULLUP 可访问这些内置上拉电阻。这有效地反转了 INPUT 模式的行为,其中 HIGH 表示传感器关闭,LOW 表示传感器打开。此上拉电阻的值取决于所使用的微控制器。在大多数基于 AVR 的主板上,该值保证在 20kΩ 和 50kΩ 之间。在 Arduino Due 上,它介于 50kΩ 和 150kΩ 之间。有关确切值,请参阅电路板上微控制器的数据表。

将传感器连接到配置了 INPUT_PULLUP 的引脚时,另一端应接地。如果是简单开关,这会导致引脚在开关打开时读取 HIGH,在按下开关时读取 LOW。上拉电阻提供足够的电流来点亮连接到配置为输入的引脚的 LED。如果项目中的 LED 似乎在工作,但非常暗淡,则很可能就是这种情况。

控制引脚是 HIGH 还是 LOW 的相同寄存器(内部芯片内存位置)控制上拉电阻。因此,如果引脚配置为在引脚处于 INPUT 模式时打开上拉电阻,则如果随后使用 pinMode() 将引脚切换到 OUTPUT 模式,则引脚将配置为 HIGH。这也适用于其他方向,如果使用 pinMode() 切换到输入,则处于高电平状态的输出引脚将设置上拉电阻。

示例

pinMode(3,INPUT) ; // 将引脚设置为输入,而不使用内置上拉电阻
pinMode(5,INPUT_PULLUP) ; // 使用内置上拉电阻将引脚设置为输入

配置为输出的引脚

使用 pinMode() 配置为输出的引脚处于低阻抗状态。这意味着它们可以为其他电路提供大量电流。Atmega 引脚可以为其他设备/电路提供(提供正电流)或吸收(提供负电流)高达 40 mA(毫安)的电流。这个电流足以点亮 LED(不要忘记串联电阻),或运行许多传感器,但不足以运行继电器、螺线管或电机。

尝试从输出引脚运行高电流设备,可能会损坏或毁坏引脚中的输出晶体管,或损坏整个 Atmega 芯片。通常,这会导致微控制器中的"死"引脚,但其余芯片仍能正常工作。因此,除非特定应用需要从引脚吸取最大电流,否则最好通过 470Ω 或 1k 电阻将 OUTPUT 引脚连接到其他设备。

pinMode() 函数

pinMode() 函数用于将特定引脚配置为输入或输出。可以使用 INPUT_PULLUP 模式启用内部上拉电阻。此外,INPUT 模式明确禁用内部上拉电阻。

pinMode() 函数语法

Void setup () {
pinMode (pin , mode);
}
  • pin − 您希望设置其模式的引脚编号

  • mode − INPUT、OUTPUT 或 INPUT_PULLUP。

示例

int button = 5 ; // 按钮连接到引脚 5
int LED = 6; // LED 连接到引脚 6

void setup () {
    pinMode(button , INPUT_PULLUP);
    // 使用上拉电阻将数字引脚设置为输入
    pinMode(button , OUTPUT); // 将数字引脚设置为输出
}

void setup () {
    If (digitalRead(button ) == LOW) // 如果按钮被按下 
    {
        digitalWrite(LED,HIGH); // 打开 led
        delay(500); // 延迟 500 毫秒
        digitalWrite(LED,LOW); // 关闭 led
        delay(500); // 延迟 500 毫秒
    }
}

digitalWrite() 函数

digitalWrite() 函数用于将 HIGH 或 LOW 值写入数字引脚。如果引脚已通过 pinMode() 配置为输出,则其电压将设置为相应值:HIGH 为 5V(或 3.3V 板上的 3.3V),LOW 为 0V(接地)。如果引脚配置为输入,digitalWrite() 将启用(​​HIGH)或禁用(LOW)输入引脚上的内部上拉电阻。建议将 pinMode() 设置为 INPUT_PULLUP,以启用内部上拉电阻。

如果您未将 pinMode() 设置为 OUTPUT,并将 LED 连接到引脚,则在调用 digitalWrite(HIGH) 时,LED 可能会变暗。如果不明确设置 pinMode(),digitalWrite() 将启用内部上拉电阻,其作用类似于大型限流电阻。

digitalWrite() 函数语法

Void loop() {
digitalWrite (pin ,value);
}
  • pin − 您希望设置其模式的引脚编号

  • value − HIGH 或 LOW。

示例

int LED = 6; // LED 连接到引脚 6

void setup () {
	pinMode(LED, OUTPUT); // 将数字引脚设置为输出
}

void setup () {
    digitalWrite(LED,HIGH); // 打开 led
    delay(500); // 延迟 500 毫秒
    digitalWrite(LED,LOW); // 关闭 led
    delay(500); // 延迟 500 毫秒
}

analogRead( ) 函数

Arduino 能够检测是否有电压施加到其某个引脚,并通过 digitalRead() 函数报告该情况。开/关传感器(检测物体的存在)与模拟传感器(其值不断变化)之间存在差异。为了读取这种类型的传感器,我们需要不同类型的引脚。

在 Arduino 板的右下角,您将看到六个标记为"Analog In"的引脚。这些特殊引脚不仅可以告知是否有电压施加到它们,还可以告知其值。通过使用 analogRead() 函数,我们可以读取施加到其中一个引脚的电压。

此函数返回 0 到 1023 之间的数字,表示 0 到 5 伏之间的电压。例如,如果在引脚 0 上施加 2.5 V 的电压,analogRead(0) 将返回 512。

analogRead() 函数语法

analogRead(pin);
  • pin − 要读取的模拟输入引脚编号(大多数电路板上为 0 到 5,Mini 和 Nano 上为 0 到 7,Mega 上为 0 到 15)

示例

int analogPin = 3;//电位器电位器(中间端子)
// 连接到模拟引脚 3
int val = 0; // 用于存储读取值的变量

void setup() {
	Serial.begin(9600); // 设置串行
}

void loop() {
    val = analogRead(analogPin); // 读取输入引脚
    Serial.println(val); // 调试值
}