■map関数
map関数は数値をある範囲から別の範囲に変換します。
■使用例
Arduino IDEで使用するmap関数の使用例は以下の通りです。試しにこのプログラムをArduino UNOで実行すると、オープンにしたA0ピンのランダムな電圧を10ビットで読み取り(0~5V:0~1023)、読み取った値をmap関数で8ビットに丸め(0~5V:0~255)、10ビットと8ビットにした値をPCのシリアルモニター上に図1の通り表示します。
void setup() { Serial.begin(9600); //9600bpsでシリアルポートを開く } void loop() { int val1 = analogRead(0); //オープンにしたA0ピンの値を「val1」に代入します int val2 = map(val1, 0, 1023, 0, 255); //「val1」の値10ビットを8ビットに丸め「val2」に代入 Serial.print("val1="); //「val1=」をシリアル出力します Serial.print(val1); //「val1」の値をシリアル出力します Serial.print(" : val2="); //「 : val2=」をシリアル出力します Serial.println(val2); //「val2」の値をシリアル出力します }
図2:プログラム実行結果
■構文
map(value, fromLow, fromHigh, toLow, toHigh)
■パラメータ
value : 変換したい数値
fromLow : 現在の範囲の下限
fromHigh : 現在の範囲の上限
toLow : 変換後の範囲の下限
toHigh : 変換後の範囲の上限
■戻り値
変換後の数値 (long)
■補足
fromLowと同じ値を与えると、toLowが返り、fromHighと同じ値ならtoHighとなります。その中間の値は、2つの範囲の大きさの比に基づいて計算されます。そのほうが便利な場合があるので、この関数は範囲外の値も切り捨てません。ある範囲のなかに収めたい場合は、constrain関数と併用してください。
範囲の下限を上限より大きな値に設定できます。そうすると値の反転に使えます。
例 y = map(x, 1, 50, 50, 1);
範囲を指定するパラメータに負の数を使うこともできます。
例 y = map(x, 1, 50, 50, -100);
map関数は整数だけを扱います。計算の結果、小数が生じる場合、小数部分は単純に切り捨てられます。