举例说明Arduino的输入和输出功能

649 阅读5分钟

为了使Arduino板与不同的集成芯片、传感器、LED和其他外设连接,在输入和输出方面使用了不同的函数。同样地,为了在Arduino板上运行编译好的代码,也使用了这些函数。这些输入和输出函数也定义了Arduino程序的输入和输出。

输入/输出函数

在Arduino中,有五种不同类型的函数用于配置其输入和输出。本论述中简要讨论了以下输入输出函数。

  • pinMode()函数
  • digitalRead()函数
  • digitalWrite()函数
  • analogRead()函数
  • 函数 模拟写()函数

pinMode()函数

为了将外围设备连接到Arduino板上,其引脚被分配给每个必须连接到Arduino板的设备。引脚编号是在Arduino代码中使用引脚模式函数分配的。引脚模式函数有两个参数:一个是引脚号码,另一个是引脚的模式。引脚模式又被分为三种类型。

  • INPUT
  • OUTPUT
  • INPUT_PULLUP

INPUT : 它定义了各自的引脚,将被用作Arduino的输入。

OUTPUT: 这种模式用于向任何连接的设备发出指令。

INPUT_PULLUP : 这个模式也用于为引脚分配输入状态。通过使用这种模式,极性将与给定的输入相反,例如,如果输入为高电平,意味着设备关闭,如果输入为低电平,意味着设备开启。这个功能在Arduino内置的内部电阻的帮助下工作。

语法:要使用引脚模式,应遵循以下语法。

pinMode(pin-number, mode-of-pin);

digitalRead()和digitalWrite()函数

Arduino Uno中有14个数字引脚,可用于读和写功能。当需要知道任何特定引脚的状态时,可以使用digitalRead()函数。这个函数是一个返回型函数,因为它将在其输出中告诉引脚的状态。

同样地,当需要给任何引脚分配状态时,就需要使用digitalWrite()函数。digitalWrite()函数有两个参数,一个是引脚编号,另一个是用户定义的状态。

这两个函数都是布尔类型的,所以在数字写函数中只使用两种状态,一种是高电平,另一种是低电平。要使用digitalRead()和digitalWrite()函数,应使用以下语法。

digitalRead (pin-number);
digitalWrite(pin-number , state);

例子

在下面提到的例子中,使用了pinMode()、digitalRead()和digitalWrite()函数。

int buttonPin = 2;    
int ledPin =  12;      
// variables will change:
int buttonState;      
void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
   buttonState = digitalRead(buttonPin);
   Serial.println(buttonState);
  if (buttonState == 1) {
    // turn LED on:
    digitalWrite(ledPin, 1);
  } else {
    // turn LED off:
    digitalWrite(ledPin, 0);
  }  
}

在示例代码中,使用输入和输出函数使一个LED打开和关闭,同时也使用了一个按钮。

首先声明了按钮和LED的引脚号,并将INPUT_PULLUP作为其模式给了按钮,然后将LED作为其模式给了输出。

为了读取按钮的状态,它必须处于输入模式,这就是为什么INPUT_PULLUP被赋予了按钮,并且在设置函数中使用引脚模式,声明的引脚被分配给Arduino的按钮和LED。

同样的,之后循环通过使用digitaRead()函数来读取按钮的初始状态。如果按钮的状态是高电平,那么LED将被赋予高电平状态,这意味着LED将被打开。然而,如果按钮的状态是低,那么LED的状态将是低,这意味着LED将被关闭。

由于INPUT_PULLUP用于按钮,它可以将按钮的输入倒置,如将高电平变为低电平,反之亦然。因此,当程序被编译时,LED也将被打开,按下按钮后,LED将被关闭。

输出

analogRead()和analogWrite()函数

Arduino Uno有6个模拟端口,可以通过这些模拟读写函数来使用。analogRead()函数将读取模拟引脚的状态,并将以数字的形式返回一个值,对于10比特的分辨率,范围是0到1024,对于12比特的分辨率,范围将是0到4095。

位的分辨率是模拟到数字的转换,所以对于10位来说,范围可以用2^10来计算,对于12位来说,将是2^12。然而,为了给Arduino Uno上的任何模拟引脚分配一个状态,可以使用函数analogWrite()。它将产生脉冲调制波,状态将通过给出其占空比来定义,占空比范围为0-255。

模拟函数和数字函数的主要区别在于,数字函数以高电平或低电平的形式定义数据,而模拟函数则以脉宽调制的占空比形式给出数据。下面给出了模拟读和写的语法,然后给出了一个示例代码,以资说明。

analogRead(pin-number);
analogWrite(pin-number , value-of-pin);

例子

为了演示digitalRead()和digitalWrite()函数的使用,我们编译了一个用于改变LED亮度的Arduino程序。LED的亮度是通过连接到Arduino的模拟引脚A3的电位器来改变的。analogRead()函数读取电位器的输出,然后使用map函数对电位器的值进行缩放。在数值被放大后,它被送给了LED。

int LED_PIN = 4;  
void setup() {
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT);
}
void loop() {
  int analogValue = analogRead(A3);
  int brightness = map(analogValue, 0, 1023, 0, 255);
  analogWrite(LED_PIN, brightness);
  Serial.print("Analog: ");
  Serial.print(analogValue);
  Serial.print(", Brightness: ");
  Serial.println(brightness);
  delay(100);
}

当电位器的值为零时,意味着电阻为最大,将没有电压供应给LED。因此,亮度的值也将为零,因此LED将保持在关闭状态。

当电位器的值减少时,亮度的值将增加,因此LED将处于开启状态。

总结

当涉及到设备与Arduino的接口或制作基于硬件的项目时,输入输出功能起到了非常重要的作用。这些函数是每个Arduino项目的构建模块。在这篇文章中,我们借助示例代码详细讨论了输入输出函数。