【Arduino学习笔记07】模拟信号的输入与输出 analogRead() analogWrite() map() constrain()
- 模拟信号:Arduino中的模拟信号就是0v~5v的连续的电压值
- 数字信号:Arduino中的数字信号就是高电平(5V)或者低电平(0V),是两个离散的值
模拟信号->数字信号:ADC(模数转换器)
ADC是用于将模拟信号转换为数字信号的电路。将输入的模拟信号通过ADC转换为数字信号,处理器才能对其进行处理。
这里讲的模拟输入是指0~5v的电压值。在Arduino上,ADC具有10位分辨率,这意味着它可以通过1,024个数字表示模拟电压。相当于将连续的电压值0~5v映射到离散的数值0~1023。将0 ~ 5V的电压分成1024份(2^10),算出来约为4.882mV的测量精度。即:0~4.882mV之间的电压值映射到数字0,4.883mV~9.764mV之间的电压值映射到数字1......
这里的转换关系如下:
数字i对应的模拟电压区间为:

如果用区间的中位数来代表数字i对应的模拟电压:

模拟输入:analogRead(pin)
- 用analogRead()读取到的输入值就是0~1023之间的数值
- pin = 0~5 / A0~A5
模拟输出:analogWrite(pin, outputVal)
- pin = 3,5,6,9,10,11(PWM引脚)
- outputVal的取值范围:0~255(对应0V~5V)
这里的映射关系比较多,用一个图示说明一下:

这种映射关系可以方便地借助map()函数实现:
map(value, fromLow, fromHigh, toLow, toHigh):
- value : 要处理的数值,在这里就是指模拟输入端读的数值
- fromLow, fromHigh : 输入的上下限
- toLow, toHigh : 想要映射到的数值范围的上下限
- 这里的fromLow和fromHigh,toLow和toHigh没有明确的大小关系。map函数做的只是得到一个把fromLow映射到toLow,fromHigh映射到toHigh的线性映射关系,不在乎toLow和toHigh哪个大哪个小。
- 返回值:根据得到的线性映射关系将value映射到的那个值
值得注意的是:map()函数并没有限制value的大小必须在fromLow和fromHigh之间,它只是根据得到的线性映射关系来输出一个相对应的值。因此使用map()的时候可能会借助constrain()函数来限制输出值的范围:
constrain(value, min, max) :
- value < min : return min
- value > max : return max
- min <= value <= max : return value
【Arduino学习笔记07】模拟信号的输入与输出 analogRead() analogWrite() map() constrain()的更多相关文章
- Spring MVC 学习笔记 json格式的输入和输出
Spring mvc处理json需要使用jackson的类库,因此为支持json格式的输入输出需要先修改pom.xml增加jackson包的引用 <!-- json --> <dep ...
- Python学习笔记(一)——输入与输出
输出:——print() Python中的输出使用print()完成 >>> 在屏幕中输出Hello World >>> print('Hello World') ...
- 机器学习实战(Machine Learning in Action)学习笔记————07.使用Apriori算法进行关联分析
机器学习实战(Machine Learning in Action)学习笔记————07.使用Apriori算法进行关联分析 关键字:Apriori.关联规则挖掘.频繁项集作者:米仓山下时间:2018 ...
- Arduino学习笔记① 初识Arduino
1.前言 近段时间,博主陆续更新了ESP8266学习笔记,主要开发平台是Arduino.但是,对于很多无基础的初学者来说,甚至不了解Arduino是什么.因此,博主决定加入一个Arduino学 ...
- Windows phone 8 学习笔记(1) 触控输入
原文:Windows phone 8 学习笔记(1) 触控输入 Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此 ...
- 【Visual C++】游戏编程学习笔记之八:鼠标输入消息(小demo)
本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder 微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.c ...
- 学习笔记 07 --- JUC集合
学习笔记 07 --- JUC集合 在讲JUC集合之前我们先总结一下Java的集合框架,主要包含Collection集合和Map类.Collection集合又能够划分为LIst和Set. 1. Lis ...
- matlab学习笔记5--低级文件输入输出函数
一起来学matlab-matlab学习笔记5 低级文件输入输出函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感谢张 ...
- Arduino学习笔记⑤ 模拟IO实验
1.前言 还记得前几个我们都是在讲解数字IO,而其实我们生活中大多数信号都是模拟信号,如声音以及温度变化.在Arduino中,常用0~5v的电压来表示模拟信号. 1.1 模拟输入功能 ...
随机推荐
- 洛谷 P1525 关押罪犯 (贪心,扩展域并查集)
题意:有\(n\)个罪犯,\(m\)对罪犯之间有仇,现在将这些罪犯分到两个监狱里去,问两个监狱里有仇罪犯之间的最大权值最小为多少. 题解:先按边权从大到小排序,然后贪心,边权大的两个罪犯,我们一定要先 ...
- nginx 80端口跳转到443
nginx配置文件80配置中增加 rewrite ^ https://$http_host$request_uri? permanent; 如图: https://blog.csdn.net/jian ...
- service配置文件
[Unit]Description="itcp Service"After=network.target cs_tcp.service [Service]Type=simpleGu ...
- .NET中使用DebuggerDisplay轻松定制调试
前言 对于调试的方式有多种,不过在今天我们将看到的监视窗口对变量的监视,当然在这里我们是定制内部的变量值,或者说变量的显示与计算的内容. 注:监视窗口在调试时可以一次显示多个变量."快速监视 ...
- HDU - 5115 Dire Wolf (非原创)
Dire wolves, also known as Dark wolves, are extraordinarily large and powerful wolves. Many, if not ...
- 脚本化CSS(通过JS来间接操作CSS)
(一)通过.style.形式,获取的是行间样式,可读可写 1.行间样式语法 1 <div style="width:100px;border:5px solid red;height: ...
- μC/OS-III---I笔记8---事件标志
当任务需要同步时可以使用信号量.A任务给B任务发送消息后B任务才能继续运行.如果需要A任务给任务B传递数据的时候就可以采用消息队列.但对于繁杂任务的同步,比如多个时间发生以后执行一个事件,或者是C任务 ...
- 力扣566. 重塑矩阵-C语言实现-简单题
题目 传送门 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据. 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要 ...
- Frameworkless Movement
Frameworkless Movement 无框架运动 https://www.frameworklessmovement.org/ vanilla javascript https://githu ...
- Flutter: debounce 避免高频率事件
原文 函数 import 'dart:async'; Function debounce(Function fn, [int t = 30]) { Timer _debounce; return () ...