为了使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项目的构建模块。在这篇文章中,我们借助示例代码详细讨论了输入输出函数。