Oh!Coder

Coding Life

好玩的Arduino-获取输入数字信号

| Comments

Hi,大家好!经过前几次的学习,我们知道了如何让LED神灯进行各种闪烁。在学习的过程中,了解到Arduino的基础知识。单从知识构成来说,我们学习了如何向电器元件发送信号,比如向LED发送的各种闪烁的模拟信号和数字信号。接下来呢,我们将试着挑战一下如何获取电器元件的输入信号。

嗯,这一次我们先试着获取电器元件输入的数字信号。为了完成此次学习,我们需要从硬件和软件两方面做如下准备。

硬件方面

arduino-read-digital-parts

图片来源:Arduino电路配件

具体包括如下:

  • Arduino UNO电路板(1块)
  • 面包板(1块)
  • 10k电阻(1个)
  • 按键开关(1个)
  • 面包线(3根)

猛然看来,比起前几次来说,一下子多出来不少部件呢!几个部件都不复杂,简单做个介绍。以此图为例,左上方是面包板,是用来连接复杂电路的,以左边E和F行号为界线,分为上半部分和下半部分,这两部分互不连通。上下两部分的横向引脚互不连通,纵向引脚处于连通状态。在用面包板连接电路时。

紧挨着面包板的右侧是10k的电阻,这个不必细说,很简单的元器件。再向右看是一个按键开关,这次要获取的数字信号,就是这个部件发出的。最右侧是面包线,可以看作是普通的导线。下面中间的那个电路板自然是Arduino UNO了,之前就已经介绍过,这里不必多说。

好!这次用到的硬件就这些。

软件方面

Arduino官方提供的IDE,和之前一样。

好的!需要准备的东西就这些。下面就开始动手啦!!

连接电路

arduino-read-digital

图片来源:Arduino连接开关按键电路示意图

按照图中所示,将我们准备的元器件连接好。这里有两点需要注意,第一点是开关按键是长方形的,所以要注意插入面包板时的方向。第二点是面包板上下两部分的引脚连通性,横向是不连通的,纵向是连通的。

下面是最后一步!

添加几行代码

最后,我们还需要加入几行代码,来获取按键输入的数字信号。

首先,像之前一样,新建一个项目窗口。

arduino-ide

图片来源:Arduino官方IDE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 定义2号引脚为按键插入引脚
int pushButton = 2;

// 对Arduino电路板或相关状态进行初始化方法
void setup() {
  // 开启串行通信,并设置其频率为9600。
  // 如果没有特别要求,此数值一般都为9600。
  Serial.begin(9600);
  // 设置2号引脚为信号输入引脚
  pinMode(pushButton, INPUT);
}

// 系统调用,无限循环方法
void loop() {
  // 读取按键输入针脚的信号值,
  // 将其存入buttonState变量。
  int buttonState = digitalRead(pushButton);
  // 将获取的数字信号值打印到串口显示
  Serial.println(buttonState);
  // 每次循环之间,延时一毫秒执行
  delay(1);
}

代码就这么多!这次又出现了几个新面孔,下面做一个介绍。Serial.begin方法的作用是设置串行通信的频率。这里注意一下pinMode方法的第二个参数,在前面几次点亮LED神灯的教程里,这里都是OUTPUT,这次设置的是INPUT,作用与之前相反。之前是对LED设置状态,属于输出值,这里是从按键获取状态,属于输入值。digitalRead顾名思义,调用时输入一个引脚号,可读取这个引脚输入的信号。Serial.println方法将数值打印到串口进行显示。

数一数,这次程序中出现的新面孔,一共只有三个!So easy!最后只需要将程序烧入Arduino即可。

arduino-menu

图片来源:Arduino官方IDE的文件编辑菜单选项(注意此处不是指Arduino顶部工具栏)

烧入方法点击上图中,标有向右指向的箭头图标,即可自动完成从编译到烧入整个过程。如果不出意外,此时程序已经烧入Arduino。单击上图最右侧的放大镜图标,打开串口调试窗口。此时窗口正在不停的输出数字0,按下Arduino电路板上的按键按钮,如果一切正常,数字0会变为1。

arduino-serial

图片来源:Arduino串口调试窗口

松开按键,输出的数字变为0,按下变为1。

总结

至此整个挑战完成!此时就可以获取到Arduino上电器元件的操作状态。通过这次学习,我们可以获取到电器元件所输入的数字信号。当元器件状态改变时,我们可以近乎实时的获取到元器件的当前状态。这为我们以后通过元器件控制其他电气设备提供了一种可能。

下期预告

这一次,虽然我们可以获取到按键开关的输入状态。但按键开关的输入状态属于数字信号,属于非连续信号。当需要进行连续渐变控制的时候,数字信号就会显得力不从心。下一次,我们将再接再厉,挑战一下如何获取元器件输入的模拟信号!学完之后,我们就可以通过连续信号对渐变状态进行控制!

Comments