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