Map()
從 YFRobotwiki
描述
將一個數字重新映射到另一個範圍。 也就是說,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; }
擴展閱讀
更多建議和問題歡迎反饋至 YFRobot論壇