极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10498|回复: 0

OCROBOT入门教程019--使用map进行数据映射

[复制链接]
发表于 2014-4-25 16:15:51 | 显示全部楼层 |阅读模式
本帖最后由 董董soul 于 2016-10-27 11:10 编辑

我们在很多场合需要对获取的数值进行线性的放大或者缩小,一般我们会使用乘法或者除法来进行处理。其实我们还有另外一种实现方法,就是使用map函数。

在第七课使用电位器控制PWM的程序中,我们是使用了ADC读数除以4,让其达到PWM输出所需要的数值,这次我们换一种方法,使用map函数把ADC读数映射到0-255。


map(value, fromLow, fromHigh, toLow, toHigh)

描述
将一个数从一个范围映射到另外一个范围。也就是说,会将 fromLow 到 fromHigh 之间的值映射到 toLow 在 toHigh 之间的值。
不限制值的范围,因为范围外的值有时是刻意的和有用的。如果需要限制的范围, constrain() 函数可以用于此函数之前或之后。
注意:两个范围中的“下限”可以比“上限”更大或者更小,因此 map() 函数可以用来翻转数值的范围,例如:

y = map(x, 1, 50, 50, 1);
这个函数同样可以处理负数,请看下面这个例子:

y = map(x, 1, 50, 50, -100);
是有效的并且可以很好的运行。

map() 函数使用整型数进行运算因此不会产生分数,这时运算应该表明它需要这样做。小数的余数部分会被舍去,不会四舍五入或者平均。

参数
value:需要映射的值
fromLow:当前范围值的下限
fromHigh:当前范围值的上限
toLow:目标范围值的下限
toHigh:目标范围值的上限





  1. /*映射一个模拟值到8位(0到255)*/
  2. void setup(){
  3. }

  4. void loop()
  5. {
  6.   int val = analogRead(0);
  7.   val = map(val,0,1023,0,255);
  8.   analogWrite(9,val);
  9. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-18 19:42 , Processed in 0.043159 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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