map()

名称

map()

説明

ある範囲の数値を別の範囲の数値に対応づける。すなわち、fromLowはtoLowに、fromHighは、toHighに、fromLowとfromHighの間の数値はtoLowとtoHighの間の数値に対応づけられる。

範囲外の値を意識して使う場合もあるし有効でもあるので、変換する値は指定された範囲に限定しない。範囲を制限する必要がある場合は、constrain()を、この関数の前後で利用すればいい。

下位境界値は上位境界値よりも大きくてもいいし、上位境界値は下位境界値より小さくてもいい。これにより、例えば、値の範囲を逆転させることができる。

1
y = map(x, 1, 50, 50, 1);

負の値を使うこともでき,以下のような使い方も可能である。

1
y = map(x, 1, 50, 50, -100);

map()関数は整数で計算をするため、計算結果が小数になっても、小数は生成しない。小数点以下は切り捨てられる。四捨五入をしたり平均をとったりはしない。

書式

long map(long value, long fromLow, long fromHigh, long toLow, long toHigh);

引数

value対応させる値。
fromLow対応前の値の下位境界。
fromHigh 対応前の値の上位境界。
toLow対応後の値の下位境界。
toHigh対応後の値の上位境界。

戻り値

対応付けられた値。

使用例

1
2
3
4
5
6
7
8
/* 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);
}

補足

興味のある人向け。この関数のすべてのソースは以下の通り。

1
2
3
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;
}

注意

既に言及しているが、map()関数は計算に整数を使う。このため小数は返却されない。例えば3/2や4/3、5/4は異なる値だが、map()では、全て1が返る。もしも、高精度の計算が必要な場合(例: 電圧が正確に小数点以下3桁が必要な場合)は、map()の使用を避け、自分で計算するように実装すること。

訳者註

使用例で、analogRead()で得られた10ビットの値を8ビットの値に変換する例が載っていますが、より正確には、以下ではないかと思います。

1
  val = map(val, 0, 1024, 0, 256);

参照

言語 abs()

言語 constrain()

言語 max()

言語 min()

言語 pow()

言語 sq()

言語 sqrt()

オリジナルのページ

https://www.arduino.cc/reference/en/language/functions/math/map/

Last Revision: 2022/09/07

実装の解析

まだ解析していません。

最終更新日

January 4, 2024

inserted by FC2 system