名称
map()
説明
ある範囲の数値を別の範囲の数値に対応づける。すなわち、fromLowはtoLowに、fromHighは、toHighに、fromLowとfromHighの間の数値はtoLowとtoHighの間の数値に対応づけられる。
範囲外の値を意識して使う場合もあるし有効でもあるので、変換する値は指定された範囲に限定しない。範囲を制限する必要がある場合は、constrain()を、この関数の前後で利用すればいい。
下位境界値は上位境界値よりも大きくてもいいし、上位境界値は下位境界値より小さくてもいい。これにより、例えば、値の範囲を逆転させることができる。
|
|
負の値を使うこともでき,以下のような使い方も可能である。
|
|
map()関数は整数で計算をするため、計算結果が小数になっても、小数は生成しない。小数点以下は切り捨てられる。四捨五入をしたり平均をとったりはしない。
書式
変数の範囲を他の範囲に対応付けるには、以下の関数を使う。
map(value, fromLow, fromHigh, toLow, toHigh)
C言語シグネチャ(avr)
long map(long value, long fromLow, long fromHigh, long toLow, long toHigh);
引数
この関数は以下の引数を受け付ける。
| value | 対応させる値。 |
| fromLow | 対応前の値の下位境界。 |
| fromHigh |
|
| toLow | 対応後の値の下位境界。 |
| toHigh | 対応後の値の上位境界。 |
戻り値
対応付けられた値。データ型: long。
コード例
10ビット(0-1023)のアナログ入力値を、8ビット(0-255)の値に対応付け、9番ピンのPWM出力を制御する。入出力値は、シリアルモニターに表示される。
|
|
アナログピン(A0)にポテンショメーターを、LEDを9番ピンに、それぞれ接続すれば、ポテンショメーターを回すことで、LEDの明るさを制御することができる。
補足
数学に興味のある人向け。この関数のすべてのソースは以下の通り。
|
|
注意
既に言及しているが、map()関数は計算に整数を使う。このため小数は返却されない。例えば3/2や4/3、5/4は異なる値だが、map()では、全て1が返る。もしも、高精度の計算が必要な場合(例: 電圧が正確に小数点以下3桁が必要な場合)は、map()の使用を避け、自分で計算するように実装すること。
訳者註
使用例で、analogRead()で得られた10ビットの値を8ビットの値に変換する例が載っていますが、より正確には、以下ではないかと思います。
|
|
参照
オリジナルのページ
https://docs.arduino.cc/language-reference/en/functions/math/map/
実装の解析
まだ解析していません。
最終更新日
August 16, 2026