找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 41067|回复: 15
打印 上一主题 下一主题
收起左侧

Arduino教程-获取输入模拟信号

  [复制链接]
跳转到指定楼层
楼主
Hi,大家好!经过上一次的学习,我们知道了如何获取外部电器元件输入的数字信号。这次我们将一起学习如何获取外部电器元件输入的模拟信号,也即连续信号。
和上一次同理,这次我们使用的元器件换成了一个模拟信号输入器件,使用旋转电位计代替上一次的按键开关。道理都是相通的,废话不多说,让我们直奔主题!
首先还是准备阶段,包括硬件和软件两方面。
硬件方面
图片来源:Arduino 电路配件
具体包括如下:
  • Arduino UNO电路板(1块)
  • 旋转电位计(1个)
  • 面包线(3根)
一共只有三种部件,比上一次还少!这次多了一个旋转电位计,其实就是我们平时常见的旋转开关,此开关可以发出连续的模拟信号。其他部件不必多说。
软件方面Arduino官方提供的IDE。
好!需要的就这些。下面我就开始连接电路!
连接电路
图片来源:Arduino UNO 连接旋转电位计示意图
直接用面包线把电位计连接到Arduino UNO电路板上,注意电位计的正负电源针脚不要接错!
接下来是最后一步!
添加几行代码首先打开Arduino的IDE,新建一个Arduino项目窗口。

图片来源:Arduino官方IDE
完成之后,向其中添加如下代码。


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

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




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

图片来源:Arduino官方IDE的文件编辑菜单选项
根据上图指示,点击向右指向的箭头图标,将程序烧入。成功之后,点击右上方的放大镜图标,打开串口调试窗口。此时你会看到,窗口在实时的更新获取到的数据。旋转电位计,窗口中的数据也会相应发生改变。因为Arduino UNO电路板上有一个模拟数字信号转换器,俗称ADC(analog-to-digital converter),此时读到的数值会被转换为0到1023之间,即analogRead()方法返回的值在0到1023之间。
总结打完收工!这次我们主要学习了如何获取外部元器件输入的模拟信号。这个功能的使用非常的常见,比如控制灯光的强弱,声音的大小等等,都有可能会用的到。而实现这个想法,也只需要一个analogRead方法即可,已经无法再简单了!
下期预告至此呢,我们学习了数字信号的输入输出,模拟信号的输入输出。我们已经具备了一定的基础。接下来要做什么呢?嗯,接下来的小怪兽会逐渐强大!在前几次学习中,我们用到了一个名为delay()方法,这个方法是系统类库提供给我们的,拿来就能用。那么现在问题来了,为了让以后的编程过程更灵活,如何在不使用这个方法的情况下实现时间延迟呢?嗯,下一次我们将挑战这个问题!


ohcoder的系列精彩Arduino教程:
Arduino教程-初识Arduino(包含本教程目录):http://www.51hei.com/bbs/dpj-41334-1.html
Arduino教程-开篇:http://www.51hei.com/bbs/dpj-41335-1.html
Arduino教程-点亮LED神灯:http://www.51hei.com/bbs/dpj-41336-1.html
Arduino教程-让LED神灯闪烁:http://www.51hei.com/bbs/dpj-41337-1.html
Arduino教程-让LED神灯亮度渐变:http://www.51hei.com/bbs/dpj-41338-1.html
Arduino教程-获取输入数字信号:http://www.51hei.com/bbs/dpj-41339-1.html
Arduino教程-获取输入模拟信号:http://www.51hei.com/bbs/dpj-41340-1.html
Arduino教程-另一种时间延迟:http://www.51hei.com/bbs/dpj-41331-1.html
Arduino教程-按键开关:http://www.51hei.com/bbs/dpj-41341-1.html
Arduino教程-停止抖动!:http://www.51hei.com/bbs/dpj-41333-1.html
Arduino教程-抛弃外部电阻!:http://www.51hei.com/bbs/dpj-41332-1.html
Arduino教程-用按键开关计数:http://www.51hei.com/bbs/dpj-41330-1.html

………后续持续更新中请打开:http://www.51hei.com/bbs/dpj-41334-1.html
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:201592 发表于 2017-5-17 15:23 | 只看该作者
谢谢分享,真的简单易懂
回复

使用道具 举报

板凳
ID:267323 发表于 2017-12-26 19:49 | 只看该作者
你好,我想问一下为什么我的A0口没有接信号,串口显示器那里显示的是20左右呢?
回复

使用道具 举报

地板
ID:267323 发表于 2017-12-26 19:50 | 只看该作者
楼主你好,问什么我的A0口没有接信号,却显示有20左右的信号?
回复

使用道具 举报

5#
ID:274779 发表于 2018-1-11 15:23 | 只看该作者
谢谢讲解,简单易懂
回复

使用道具 举报

6#
ID:53784 发表于 2018-8-27 11:22 | 只看该作者
图片有点对不上
回复

使用道具 举报

7#
ID:379680 发表于 2018-9-16 22:09 | 只看该作者
什么程序能把输入的信号在显示屏上以信号条的方式显示?
回复

使用道具 举报

8#
ID:491875 发表于 2019-6-13 08:30 | 只看该作者
Arduino:1.8.5 (Windows 7), 开发板:"Arduino/Genuino Uno"

C:\Users\Administrator\Documents\Arduino\sketch_jun13a\sketch_jun13a.ino: In function 'void loop()':

sketch_jun13a:15: error: 'voltage' was not declared in this scope

   Serial.println(voltage);

                  ^

exit status 1
'voltage' was not declared in this scope

获取模拟信号出现这个错误信息是什么原因,本人刚刚接触单片机,希望大家多帮助,谢谢
回复

使用道具 举报

9#
ID:452474 发表于 2019-6-13 14:14 | 只看该作者
老愚童63 发表于 2019-6-13 08:30
Arduino:1.8.5 (Windows 7), 开发板:"Arduino/Genuino Uno"

C:\Users\Administrator\Documents\Arduino ...

'voltage'没有被声明,应该改为sensorValue,
回复

使用道具 举报

10#
ID:491875 发表于 2019-6-18 06:23 | 只看该作者
ccccsss 发表于 2019-6-13 14:14
'voltage'没有被声明,应该改为sensorValue,

谢谢,待会试一试。
回复

使用道具 举报

11#
ID:64053 发表于 2020-4-14 01:27 | 只看该作者
请教楼主,你这模拟后在什么地方有状态表现出来呢
回复

使用道具 举报

12#
ID:728839 发表于 2020-4-14 11:43 | 只看该作者
学习了!谢谢!新手上路
回复

使用道具 举报

13#
ID:815520 发表于 2020-8-22 17:08 | 只看该作者
请问能不能读取RC遥控器输入的PWM信号呢?或者舵机测试仪的PWM信号,他们的范围都在1000到2000多按这样说UNO和pro mini岂不是不能读取这些信号了嘛┭┮﹏┭┮
回复

使用道具 举报

14#
ID:677036 发表于 2020-8-23 20:58 | 只看该作者
先学习  在实践
回复

使用道具 举报

15#
ID:950510 发表于 2021-8-1 13:13 | 只看该作者

程序的小bug:'voltage'没有被声明,应该改为sensorValue,
回复

使用道具 举报

16#
ID:1023753 发表于 2022-7-2 13:52 | 只看该作者
老愚童63 发表于 2019-6-13 08:30
Arduino:1.8.5 (Windows 7), 开发板:"Arduino/Genuino Uno"

C:\Users\Administrator\Documents\Arduino ...

变量没有定义 上边程序有点问题 变量为 voltage改为sensorValue
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表