Arduino板上的引脚可以配置为输入或输出。 我们将解释这些模式下引脚的功能。 重要的是要注意,大多数Arduino模拟引脚可以以与数字引脚完全相同的方式配置和使用。
引脚配置为INPUT
Arduino引脚默认配置为输入,因此在使用它们作为输入时,不需要使用 pinMode()显式声明为输入。 以这种方式配置的引脚被称为处于高阻抗状态。 输入引脚对它们采样的电路提出非常小的要求,相当于引脚前面的100兆欧的串联电阻。
这意味着将输入引脚从一个状态切换到另一个状态需要非常小的电流。 这使得引脚可用于诸如实现电容式触摸传感器或将LED读作光电二极管的任务。
被配置为pinMode(pin,INPUT)的引脚,没有任何连接到它们,或者连接到它们的未连接到其他电路的引线,报告引脚状态似乎随机变化,从环境拾取电噪声,或电容耦合状态的附近针。
上拉电阻
如果没有输入,上拉电阻通常用于将输入引脚转向到已知状态。 这可以通过在输入上添加上拉电阻(to + plus; 5V)或下拉电阻(接地电阻)来实现。 10K电阻是上拉或下拉电阻的良好值。
使用内置上拉电阻,引脚配置为输入
Atmega芯片内置了20000个上拉电阻,可通过软件访问。 通过将 pinMode()设置为INPUT_PULLUP可访问这些内置上拉电阻。 这有效地反转了INPUT模式的行为,其中HIGH表示传感器关闭,LOW表示传感器打开。 此上拉的值取决于所使用的微控制器。 在大多数基于AVR的板上,该值保证在20kΩ和50kΩ之间。 在Arduino Due上,它在50kΩ和150kΩ之间。 有关确切值,请参考板上微控制器的数据手册。
当将传感器连接到配置有INPUT_PULLUP的引脚时,另一端应连接到地。 在简单开关的情况下,这导致当开关打开时引脚读取高,当按下开关时引脚读取低。 上拉电阻提供足够的电流来点亮与配置为输入的引脚微调连接的LED。 如果项目中的LED似乎工作,但很昏暗,这可能是发生了什么。
控制引脚是高电平还是低电平的相同寄存器(内部芯片存储器位置)控制上拉电阻。 因此,当引脚处于INPUTmode状态时,被配置为具有上拉电阻的引脚将被配置为HIGH,如果引脚被pinMode()切换到OUTPUT模式。 这也在另一个方向工作,并且如果切换到具有pinMode()的输入,留在高电平状态的输出引脚将设置上拉电阻。
示例
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
引脚配置为OUTPUT
配置为具有pinMode()的OUTPUT的引脚被称为处于低阻抗状态。 这意味着它们可以向其他电路提供大量的电流。 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 ; // 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()函数
digitalWrite()功能用于向数字引脚写入HIGH或LOW值。 如果该引脚已配置为具有 pinMode()的OUTPUT, 其电压将被设置为相应的值:5V(或3.3V板上的3.3V)对于HIGH,0V(接地)对于LOW。 如果引脚配置为INPUT,则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 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()函数
Arduino能够检测是否有一个电压施加到其引脚,并通过digitalRead()函数报告。 在开/关传感器(其检测物体的存在)和模拟传感器之间存在差异,其值连续变化。 为了读取这种类型的传感器,我们需要一个不同类型的引脚。
在Arduino板的右下部分,您将看到六个标记为“模拟输入"的引脚。 这些特殊引脚不仅可以判断是否有电压施加到它们,而且它的值。 通过使用 analogRead()函数,我们可以读取施加到其中一个引脚的电压。
此函数返回0和1023之间的数字,表示0和5伏特之间的电压。 例如,如果施加到引脚号0的电压为2.5V,则analogRead(0)返回512。
analogRead()函数语法
analogRead(pin);
pin - 要读取的模拟输入引脚的编号(大多数电路板上为0至5,Mini和Nano上为0至7,Mega上为0至15)
示例
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 }