map()
ある範囲の数値を別の範囲の数値に再マップします。
書式
long map(long value, long fromStart, long fromEnd, long toStart, long toEnd)
ある範囲から別の範囲に数値を再マッピングします。
つまり、fromStartに等しい値がtoStartにマッピングされ、fromEndに等しい値がtoEndにマッピングされ、他の値は比例してマッピングされます。valueが[fromStart、fromEnd]内にあるように制約しません。
"start"の値が対応する "end"より大きい場合、範囲は逆になるので、map(n、1、10、10、1)は範囲[1,10]を逆にします。負の数値が引数として表示されることがあります。
引数
value : マップする値。
fromStart : 値の現在の範囲の始まり。
fromEnd : 値の現在の範囲の終わり。
toStart : 値のマップされた範囲の先頭
toEnd : 値のマップされた範囲の終わり。
戻り値
マップされた値
考察
範囲外の値は意図的で有用な場合があるため、map()は値を範囲内に制限しません。 constrain()マクロは、範囲の制限が必要な場合は、この関数の前後に使用できます。
どちらの範囲の「下限」は、「上限」よりも大きくても小さくても構わないので、map()を使って数値の範囲を逆にすることができます。 例えば:
code:sample.ino
y = map(x, 1, 50, 50, 1);
この関数は負の数もうまく処理するので、この例では
code:sample2.ino
y = map(x, 1, 50, 50, -100);
も有効です。
map()関数は、整数の数式(引数と戻り値はすべてlong型)を使用するため、計算ではそうする必要があることを示す可能性がある場合は分数は生成されません。 小数の剰余は切り捨てられ、丸められたり平均化されたりしません。
利用例
code:sample3.ino
/* Map an ADC reading (12 bits) to 16-bit PWM (0 to 65,535) */
void setup() {
pinMode(0, INPUT_ANALOG);
pinMode(9, PWM);
}
void loop() {
int val = analogRead(0);
val = map(val, 0, 4095, 0, 65535);
analogWrite(9, val);
}
関連項目
このドキュメントはleafLabs, LLC.が執筆し、たま吉が翻訳・一部加筆修正したものです。