Map()

從 YFRobotwiki
在2017年9月13日 (三) 13:48由Allblue對話 | 貢獻所做的修訂版本

(差異) ←上個修訂 | 最新修訂 (差異) | 下一修訂→ (差異)
跳到: 導覽搜尋

描述

將一個數字重新映射到另一個範圍。 也就是說,fromLow的值將被映射到ToLow,一個值從High到toHigh,值之間的值之間的值等。

不會將值限制在範圍內,因為超出範圍的值有時是有意義和有用的。 如果需要對範圍的限制,則可以在該函數之前或之後使用constrain()函數。

請注意,任一範圍的「下限」可能大於或小於「上限」,因此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;
}


擴展閱讀

- constrain()




返回Arduino語法參考列表

更多建議和問題歡迎反饋至 YFRobot論壇