Oh!Coder

Coding Life

好玩的Arduino-获取输入模拟信号

| Comments

Hi,大家好!经过上一次的学习,我们知道了如何获取外部电器元件输入的数字信号。这次我们将一起学习如何获取外部电器元件输入的模拟信号,也即连续信号。

和上一次同理,这次我们使用的元器件换成了一个模拟信号输入器件,使用旋转电位计代替上一次的按键开关。道理都是相通的,废话不多说,让我们直奔主题!

首先还是准备阶段,包括硬件和软件两方面。

硬件方面

arduino-read-analog-parts

图片来源:Arduino 电路配件

具体包括如下:

  • Arduino UNO电路板(1块)
  • 旋转电位计(1个)
  • 面包线(3根)

一共只有三种部件,比上一次还少!这次多了一个旋转电位计,其实就是我们平时常见的旋转开关,此开关可以发出连续的模拟信号。其他部件不必多说。

软件方面

Arduino官方提供的IDE。

好!需要的就这些。下面我就开始连接电路!

连接电路

arduino-read-analog

图片来源:Arduino UNO 连接旋转电位计示意图

直接用面包线把电位计连接到Arduino UNO电路板上,注意电位计的正负电源针脚不要接错!

接下来是最后一步!

添加几行代码

首先打开Arduino的IDE,新建一个Arduino项目窗口。

arduino-ide-new

图片来源:Arduino官方IDE

完成之后,向其中添加如下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 对Arduino电路板或相关状态进行初始化方法
void setup() {
  // 开启串行通信,并设置其频率为9600。
  // 如果没有特别要求,此数值一般都为9600。
  Serial.begin(9600);
}

// 系统调用,无限循环方法
void loop() {
  // 读取针脚号为 A0 的模拟信号。
  // analogRead() 方法是模拟信号读取方法。
  // 将模拟信号值存入名为 sensorValue 的整型变量。
  int sensorValue = analogRead(A0);
  // 将获取的模拟信号值打印到串口显示。
  Serial.println(voltage);
}

好!总共所需要的代码就这么多!如果你和大家一样,一直跟随我们的教程学习,那么其实这里我们只出现了一个新面孔!没错,那就是analogRead()方法。在前面的教程中,我们还介绍过他的孪生兄弟,能猜到是谁吗?就是analogWrite()方法。这两个方法就像是孪生兄弟,前一个是读取元器件输入的模拟信号,后一个是向元器件写入模拟信号。analogRead()方法调用时,需要输入的参数是Arduino UNO电路板上的针脚号,此处我们获取的是 A0 针脚上输入的信号。

最后,我们只需要将程序烧入Arduino即可。

arduino-menu

图片来源:Arduino官方IDE的文件编辑菜单选项

根据上图指示,点击向右指向的箭头图标,将程序烧入。成功之后,点击右上方的放大镜图标,打开串口调试窗口。此时你会看到,窗口在实时的更新获取到的数据。旋转电位计,窗口中的数据也会相应发生改变。因为Arduino UNO电路板上有一个模拟数字信号转换器,俗称ADC(analog-to-digital converter),此时读到的数值会被转换为0到1023之间,即analogRead()方法返回的值在0到1023之间。

总结

打完收工!这次我们主要学习了如何获取外部元器件输入的模拟信号。这个功能的使用非常的常见,比如控制灯光的强弱,声音的大小等等,都有可能会用的到。而实现这个想法,也只需要一个analogRead方法即可,已经无法再简单了!

下期预告

至此呢,我们学习了数字信号的输入输出,模拟信号的输入输出。我们已经具备了一定的基础。接下来要做什么呢?嗯,接下来的小怪兽会逐渐强大!在前几次学习中,我们用到了一个名为delay()方法,这个方法是系统类库提供给我们的,拿来就能用。那么现在问题来了,为了让以后的编程过程更灵活,如何在不使用这个方法的情况下实现时间延迟呢?嗯,下一次我们将挑战这个问题!

Comments