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

描述

将某个范围内的一个数值重新映射到另一个范围,亦即数值 fromLow 被映射到数值 toLow 去,而数值 fromHigh 则被映射到数值 toHigh, value 则维持与 fromLow、fromHigh 的比例关系映射至新的范围。

value 不一定是在范围内的数值,因为有时候超出范围的数值可能会有其他用处;如果希望数值限制在预期的范围内,可在该函式的前后使用函式 constrain()

任一范围的下限是可以高于或低于范围的上限的,所以 map() 函式也可以用来反转一个范围内的数值,例如:

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

这个函式也可以处理负数,例如以下范例:

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

函式一样有效而且可以运作得很好。

map() 函式使用整数运算,所以不会有小数点,小数的部分会被舍去,而不是采用四舍五入做进位。

参数

value: 被映射的数字
fromLow: value 原本的范围下限
fromHigh: value 原本的范围上限
toLow: 要映射的目标范围下限
toHigh: 要映射的目标范围上限

回传

映射后的值

范例

/* 将一个读出的类比数值映射到 8bit 的大小 (0 到 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;
}

See also

constrain()


语法参考主页面

本页由热血青年 LBU 译自英文版。

The text of the 86Duino reference is a modification of the Arduino reference, and is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.