当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Arduino map()用法及代码示例


[数学]

说明

将数字从一个范围重新映射到另一个范围。也就是说,fromLow 的值将映射到 toLow,fromHigh 的值映射到 toHigh,值 in-between 到值 in-between,等等。

不将值限制在范围内,因为超出范围的值有时是有意的和有用的。如果需要限制范围,可以在此函数之前或之后使用 constrain() 函数。

请注意,任一范围的"lower bounds" 可能大于或小于"upper bounds",因此map() 函数可用于反转数字范围,例如

y = map(x, 1, 50, 50, 1);

该函数还可以很好地处理负数,所以这个例子

y = map(x, 1, 50, 50, -100);

也是有效的并且运行良好。

map() 函数使用整数数学,因此不会生成分数,当数学可能表明它应该这样做时。小数余数被截断,不取整或取平均值。

用法

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

参数

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

返回

映射的值。

示例代码

/* Map an analog value to 8 bits (0 to 255) */
void setup() {}

void loop() {
  int val = analogRead(0);
  val = map(val, 0, 1023, 0, 255);
  analogWrite(9, val);
}

附录

对于数学倾向,这是整个函数

long map(long x, long in_min, long in_max, long out_min, long out_max) {
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

注意事项和警告

如前所述,map() 函数使用整数数学。因此,分数可能会因此受到抑制。例如,像 3/2、4/3、5/4 这样的分数都将从 map() 函数返回为 1,尽管它们的实际值不同。因此,如果您的项目需要精确计算(例如电压精确到小数点后 3 位),请考虑避免使用map() 并自己在代码中手动实现计算。

相关用法


注:本文由纯净天空筛选整理自arduino.cc大神的英文原创作品 map()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。