用户工具

站点工具


reference:language:map

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

reference:language:map [2017/04/07 10:03] (当前版本)
行 1: 行 1:
 +====== map(value, fromLow, fromHigh, toLow, toHigh) ======
 +
 +===== 描述 =====
 +
 +将一个数从一个范围映射到另外一个范围。也就是说,会将 fromLow 到 fromHigh 之间的值映射到 toLow 在 toHigh 之间的值。
 +
 +不限制值的范围,因为范围外的值有时是刻意的和有用的。如果需要限制的范围, constrain() 函数可以用于此函数之前或之后。
 +
 +注意,两个范围中的“下限”可以比“上限”更大或者更小,因此 map() 函数可以用来翻转数值的范围,例如:​
 +<​code>​
 +y = map(x, 1, 50, 50, 1);
 +</​code>​
 +这个函数同样可以处理负数,请看下面这个例子:​
 +<​code>​
 +y = map(x, 1, 50, 50, -100);
 +</​code>​
 +是有效的并且可以很好的运行。
 +
 +map() 函数使用整型数进行运算因此不会产生分数,这时运算应该表明它需要这样做。小数的余数部分会被舍去,不会四舍五入或者平均。
 +===== 参数 =====
 +
 +value:​需要映射的值
 +\\ fromLow:​当前范围值的下限
 +\\ fromHigh:​当前范围值的上限
 +\\ toLow:​目标范围值的下限
 +\\ toHigh:​目标范围值的上限
 +
 +===== 返回 =====
 +
 +被映射的值。
 +===== 例子 =====
 +<code cpp>
 +/​*映射一个模拟值到8位(0到255)*/​
 +void setup(){}
 + 
 +void loop()
 +{
 +int val = analogRead(0);​
 +val = map(val, 0, 1023, 0, 255);
 +analogWrite(9,​ val);
 +}
 +</​code> ​
 +===== 附录 =====
 +
 +关于数学的实现,这里是完整函数
 +<code cpp>
 +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;
 +}
 +</​code> ​
 +
  
reference/language/map.txt · 最后更改: 2017/04/07 10:03 (外部编辑)