map()
関数は、Arduinoで使用される非常に便利な関数で、ある範囲の数値を別の範囲に変換するために使われます。たとえば、0〜1023の範囲で読み取ったアナログ値を、0〜255の範囲にマッピングする場合などに役立ちます。これにより、センサーの値を他の出力形式に変換することが簡単になります。
目次
map()
関数の構文
long map(long value, long fromLow, long fromHigh, long toLow, long toHigh);
引数の説明
value
: マッピングしたい入力の値(変換する元の数値)。fromLow
: 元の範囲の下限値。fromHigh
: 元の範囲の上限値。toLow
: 新しい範囲の下限値。toHigh
: 新しい範囲の上限値。
map()
の動作
map()
関数は、入力値を元の範囲から新しい範囲に線形に変換します。たとえば、value
が fromLow
から fromHigh
の間にある場合、それを toLow
から toHigh
の新しい範囲にスケールして返します。
使用例
例1: アナログ入力値を別の範囲にマッピング
次のコードは、アナログセンサー(例えばポテンショメータ)の値(0〜1023)をLEDのPWM制御(0〜255)にマッピングする例です。
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A0); // センサーの値を取得 (0〜1023)
int outputValue = map(sensorValue, 0, 1023, 0, 255); // 0〜1023を0〜255に変換
analogWrite(9, outputValue); // LEDに値を出力 (0〜255)
Serial.println(outputValue); // 出力値をシリアルモニタに表示
delay(10); // 少し待つ
}
この例では、センサーの入力範囲 (0~1023) がLEDのPWM制御に使える範囲 (0~255) に変換されています。これにより、センサーの値に応じてLEDの明るさが変化します。
注意点
map()
関数は、結果を整数として返します。そのため、浮動小数点を必要とする場合は別途計算が必要です。map()
関数は、範囲外の値を処理する際にクランピング(範囲外の値を範囲内に収める動作)を行わないため、場合によっては範囲外の結果が出ることがあります。範囲外の結果が出た場合は、別途制御が必要です(例えば、constrain()
関数を使って値を制限するなど)。
constrain()
を併用した例
int outputValue = map(sensorValue, 0, 1023, 0, 255);
outputValue = constrain(outputValue, 0, 255); // 出力を0〜255の範囲に制限
map()
関数は、センサー値やその他の変数を直感的に操作できる強力なツールです。