【Arduino IDE】ある範囲の数値を別の範囲の数値に変換する(map)

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() 関数は、入力値を元の範囲から新しい範囲に線形に変換します。たとえば、valuefromLow から 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() 関数は、センサー値やその他の変数を直感的に操作できる強力なツールです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次