This page is also available in 3 other languages

map()

[Math]

설명

숫자를 한 범위에서 다른 곳으로 변환한다. 즉, fromLow 의 값은 toLow 으로 변환되고, fromHigh 값은 toHigh 으로, 값들 사이의 값은 값들 사이의 값으로, 등등. 값을 범위 안으로 제한하지 않는데, 왜냐면 범위 밖의 값이 때때로 의도되고 쓸모있기 때문. 범위 제한이 필요하면, constrain() 함수를 이 함수 전 또는 후에 쓸 수 있다.

어떤 범위의 "하한"이 "상한" 보다 크거나 작을 수 있으므로 map() 함수는 숫자의 범위를 뒤집는데 쓸 수 있다. 예를 들어

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

이 함수는 음수도 잘 다루므로, 이 예는

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

이 역시 타당하며 잘 돌아간다.

map() 함수는 정수 수학을 쓰므로, 수학이 그렇게 해야 할 때, 분수를 만들지 않음을 주의하세요. 분수 나머지는 잘리며, 반올림되거나 평균되지 않는다.

문법

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

매개변수

value: 변환할 수

fromLow: 현재 범위 값의 하한

fromHigh: 현재 범위 값의 상한

toLow: 목표 범위 값의 하한

toHigh: 목표 범위 값의 상한

반환

변환된 값.

예제 코드

/* 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);
}

부록

수학적으로 기울이면, 여기에 전체 함수가 있다

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;
}

Notes & Warnings

As previously mentioned, the map() function uses integer math. So fractions might get suppressed due to this. For example, fractions like 3/2, 4/3, 5/4 will all be returned as 1 from the map() function, despite their different actual values. So if your project requires precise calculations (e.g. voltage accurate to 3 decimal places), please consider avoiding map() and implementing the calculations manually in your code yourself.

See also