1.3 数字输入/输出
1.3.1 数字I/O的函数库
Arduino数字I/O函数包括pinMode(pin,mode)、digitalWrite(pin,value)和digitalRead(pin,value),分别实现输入/输出设置、数字输出和数字输入的功能。
需要说明的是,数字I/O函数库的操作对象不仅仅是Arduino的数字I/O,还包括模拟输入的引脚。例如,在Arduino Uno控制器中,需要将模拟端口用作数字引脚,可以直接使用A0~A5,也可用D14~D19来指代模拟输入引脚A0~A5。
1.pinMode(pin,mode)
功能:将指定的引脚配置成输入或输出状态。
语法:pinMode(pin,mode)
参数:
pin:要设置模式的引脚。
mode:INPUT或OUTPUT。
注意 除了Arduino上的数字引脚外,模拟输入引脚也能用作数字引脚,如A0、A1。
2.digitalWrite(pin,value)
功能:从指定引脚写入HIGH或者LOW。
语法:digitalWrite(pin,value)
参数:
pin:引脚编号(如1,5,10,A0,A3)。
value:HIGH或LOW。
详细说明:
如果引脚被pinMode()配置为OUTPUT模式,其引脚上的电压将被设置为相应的值,HIGH为5V(3.3V控制板上为3.3V),LOW为0V。
如果引脚被pinMode()配置为INPUT模式,使用digitalWrite()写入HIGH值,将使能内部20kΩ上拉电阻,写入LOW将会禁用上拉。
注意 Arduino控制板上的数字13号引脚一般不用作数字输入,因为大部分的控制板上使用了一个LED与一个电阻连接到地。如果启动了内部的20kΩ上拉电阻,它的电压将在1.7V左右,而不是正常的5V,因为板载LED串联的电阻使电压降了下来,这意味着返回的值总是LOW。
3.digitalRead(pin)
功能:读取指定引脚的值,HIGH或LOW。
语法:digitalRead(pin)
参数:
pin:指定的引脚。
返回值:HIGH或LOW。
注意 如果引脚悬空,digitalRead()会返回HIGH或LOW(随机变化)。
1.3.2 实验:百变流水灯
1.实验目的
通过Arduino Uno的数字引脚D2~D7控制6个LED,按照我们的编程形成流水灯,学习pinMode(pin,mode)和digitalWrite(pin,value)的使用。
2.硬件连接
依次将6个LED的阳极(长管脚)通过220Ω的限流电阻接至Arduino Uno的D2~D7,阴极(短管脚)直接接至GND。硬件连接图如图1-25所示。
图1-25 流水灯硬件连接图
3.软件设计
通过数字输出digitalWrite(pin,value)对多个LED进行亮灭控制,从而形成流水灯,程序如代码清单1-2所示。
代码清单1-2:流水灯程序代码
int lowestPin = 2; // 定义数字引脚2作为流水灯起始引脚 int highestPin = 7; // 定义数字引脚7作为流水灯结束引脚 void setup() { // 将数字引脚D2~D7初始化为输出 for (int thisPin =lowestPin; thisPin <= highestPin; thisPin++) { pinMode(thisPin, OUTPUT); // 设置引脚为输出模式 } } void loop() { // 由低到高依次点亮LED,延时1秒,熄灭LED for (int thisPin =lowestPin; thisPin <= highestPin; thisPin++) { digitalWrite(thisPin,HIGH); delay(1000); digitalWrite(thisPin,LOW); } // 由高到低依次点亮LED,延时1秒,熄灭LED for (int thisPin =highestPin; thisPin <= lowestPin; thisPin--) { digitalWrite(thisPin,HIGH); delay(1000); digitalWrite(thisPin,LOW); } }
1.3.3 实验:“听话”的灯
1.实验目的
通过Arduino Uno的数字引脚D2读取按键,实现对D13上LED的控制。学习pinMode(pin,mode)、digitalWrite(pin,value)和digitalRead(pin)的使用。
2.硬件连接
将按键的一端通过220Ω的下拉电阻接至GND,另一端直接接至+5V,Arduino Uno的D2接至按键接有下拉电阻的一端,硬件连接图如图1-26所示。
图1-26 “听话”的灯硬件连接图
3.软件设计
通过数字输出digitalWrite(pin,value)和数字输入digitalRead(pin),利用按键控制LED的亮灭,程序如代码清单1-3所示。
代码清单1-3:“听话”的灯程序代码
int led = 13; // 定义数字引脚13作为LED的控制引脚 int key = 2; // 定义数字引脚2作为按键的读取引脚 int t = 0; // 定义状态变量,记录按键状态 // 当Arduino重启之后,只执行一次 void setup() { pinMode(led, OUTPUT); // 初始化引脚13作为输出 pinMode(key, INPUT); // 初始化引脚2作为输入 }
// 此部分一直循环执行 void loop() { t=digitalRead(key); // 读取按键状态 if(t==1){ // 判断按键是否为闭合状态 digitalWrite(led, HIGH); // 闭合状态,点亮LED }else digitalWrite(led, LOW); // 断开状态,熄灭LED }