Arduino数字量的输入与输出

说起数字量,这是一种最简单的信号,只有两种状态,非零即一。你就当它是你家里一盏灯的开关就好,要么开(1),要么关(0)。在Arduino中,这些数字量表示为电压,高电平5V表示数字量1,低电平0V表示数字量0。这样粗略的比喻后面还有一个问题,就是到底是输入还是输出。假如是输出,那么由Arduino决定,譬如电灯,如果没有开关,我们只能看到它是亮还是暗;假如是输入,那么由外部决定,譬如开关,由你去拨动它的状态是开还是关。
拿起Arduino,你就会发现上面有标号0至13的端口,这就是Arduino Uno所有的数字量输入输出端口。打个比喻,你家有十四盏电灯,编号好从零到十三(变态的程序员都是从零开始数数,而不是一),它们可以配置成电灯输出亮或者暗,用来表达两种状态,也可以配置成开关,等待你去拨动它们。我们在setup()过程中时常要配置好每个数字量端口是用来输入还是输出的,以便在loop()过程中能够正常的使用。譬如,我要将13号数字端口配置为输出,需要在setup()过程中添加如下语句,
pinMode(13, OUTPUT);
如果我们要将0号端口配置为输入,需要在setup()过程中添加如下语句,
pinMode(0, INPUT);
请注意,INPUT和OUTPUT所以字母要全部大写,才会变成绿色,否则不能通过编译,就会出错。
还记得Blink示例程序吗?http://arduino.cc/网站中,我们可以找到Products->Arduino Uno控制板的介绍页面,获得一些该控制板的重要信息。譬如

你可以点击上图所示区域,打开查看Arduino Uno的电路原理图,用户需安装Adobe Reader。
也可以下载Eagle后打开其完整的电路图设计文档,包括印刷电路板(PCB)的布局(
Layout)。Eagle是一款完全免费且易学易用的印刷电路板设计软件,可到http://www.cadsoftusa.com/下载。
通过打开的PDF电路图文档,我们知道,Arduino板子上黄色的发光二极管(LED)是和Arduino的13号数字端口连接起来的,并串联了1kΩ的电阻来限流,以防电流过大而烧毁发光二极管(标号L)。所以当数字端口13为高电平时,无论输入或输出,标号为L的黄色发光二极管都会亮起。

现在,你应该已经可以完全读懂Blink这个示例程序了。下面我们根据这个程序,添加一些语句,使得我们可以控制板上那个黄色的发光二极管的亮灭。

int led = 13; //设定变量led并赋值为13
void setup()
{
  pinMode(led, OUTPUT); //设置13号端口为输出
  pinMode(0, INPUT); //设置0号端口为输入
}
void loop()
{
  if(digitalRead(0) == HIGH) //读取0号端口的状态,如果为高电平
    digitalWrite(led, HIGH); //13号端口为高电平,L发光二极管亮
  else //否则
    digitalWrite(led, LOW); //13号端口为低电平,L发光二极管灭
}

我们如何才能改变0号端口的状态呢?让我们先看看Arduino Uno下面的一排接线端POWER(电源)。我们一般所用到的就是5V(高电平典型值),GND(Ground电平参考点),3.3V(某些芯片或者模块需要3.3V电源驱动,如果使用5V,可能会损坏)。我们可以用面包板所用的配线,将5V接到端口0,这就相当于向0号端口输入高电平,接入GND,输入低电平。
什么,出现下图所示的红色错误信息,无法装载程序到Arduino。你是不是在装载程序的过程中没有把0和1号端口断开连接?忘了上一节所讲的,它们既是数字输入输出端口,又是用作与计算机通信的串口。


你可以使用面包板连接线连接到面包板。如下图所示,有读者可能并不知道面包板是怎样连接和使用的,稍后将做简要说明,详情请参考附录B。


配套实验:1、Blink 2、digitalReadSerial

打赏

发表评论