Arduino 简明教程

Arduino - I/O Functions

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

Pins Configured as INPUT

Arduino 引脚默认配置为输入,因此当你将它们用作输入时,不需要用 pinMode() 显式声明为输入。这样配置的引脚称为处于高阻抗状态。输入引脚对它们采样的电路的要求极低,相当于引脚前的 100 兆欧姆串联电阻。

这意味着从一个状态转换到另一个状态的输入引脚只需很小的电流。这使得引脚可用于诸如实现电容式触摸传感器或将 LED 作为光电二极管读取的任务。

配置为 pinMode(pin, INPUT) 的引脚与未连接任何东西或连接到未连接到其他电路的电线,报告在引脚状态中的看似随机更改,从环境中拾取电噪声或电容耦合附近引脚的状态。

Pull-up Resistors

如果不存在输入,上拉电阻通常可用于将输入引脚引导到已知状态。可以通过在输入端添加上拉电阻(至 +5V)或下拉电阻(电阻至地)来实现这一点。10K 电阻是上拉或下拉电阻的良好值。

Using Built-in Pull-up Resistor with Pins Configured as Input

Atmega 芯片内置有 20000 个上拉电阻,可以通过软件访问。通过将 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。这种方法也适用于其他方向,而留在 HIGH 状态的输出引脚在使用 pinMode() 切换到输入时将设置上拉电阻。

Example

pinMode(3,INPUT) ; // set pin to input without using built in pull up resistor
pinMode(5,INPUT_PULLUP) ; // set pin to input using built in pull up resistor

Pins Configured as OUTPUT

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

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

pinMode() Function

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

pinMode() Function Syntax

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

  2. mode − INPUT、OUTPUT 或 INPUT_PULLUP。

Example

int button = 5 ; // button connected to pin 5
int LED = 6; // LED connected to pin 6

void setup () {
   pinMode(button , INPUT_PULLUP);
   // set the digital pin as input with pull-up resistor
   pinMode(button , OUTPUT); // set the digital pin as output
}

void setup () {
   If (digitalRead(button ) == LOW) // if button pressed {
      digitalWrite(LED,HIGH); // turn on led
      delay(500); // delay for 500 ms
      digitalWrite(LED,LOW); // turn off led
      delay(500); // delay for 500 ms
   }
}

digitalWrite() Function

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

如果你没有将 pinMode() 设置为 OUTPUT 并将 LED 连接到引脚,则在调用 digitalWrite(HIGH) 时,LED 可能显得昏暗。如果不显式设置 pinMode(),digitalWrite() 将启用内部上拉电阻,该电阻充当大限流电阻。

digitalWrite() Function Syntax

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

  2. value − HIGH 或 LOW。

Example

int LED = 6; // LED connected to pin 6

void setup () {
   pinMode(LED, OUTPUT); // set the digital pin as output
}

void setup () {
   digitalWrite(LED,HIGH); // turn on led
   delay(500); // delay for 500 ms
   digitalWrite(LED,LOW); // turn off led
   delay(500); // delay for 500 ms
}

analogRead( ) function

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

在 Arduino 电路板的右下部分,您将看到六个标记为“Analog In”的针脚。这些特殊针脚不仅可以判断电压是否施加给它们,还可以判断电压值。通过使用 analogRead() 函数,我们可以读取施加给某个针脚的电压。

此函数返回一个介于 0 和 1023 之间的数字,代表 0 到 5 伏之间的电压。例如,如果将 2.5 V 的电压施加到针脚 0,则 analogRead(0) 返回 512。

analogRead() function Syntax

analogRead(pin);
  1. pin – 要从中读取模拟输入针脚的数量(大多数电路板为 0 到 5,Mini 和 Nano 为 0 到 7,Mega 为 0 到 15)

Example

int analogPin = 3;//potentiometer wiper (middle terminal)
   // connected to analog pin 3
int val = 0; // variable to store the value read

void setup() {
   Serial.begin(9600); // setup serial
}

void loop() {
   val = analogRead(analogPin); // read the input pin
   Serial.println(val); // debug value
}