map()

설명

숫자를 한 범위에서 다른 곳으로 변환한다. 즉, 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

  • 앞서 언급했듯이 map() 함수는 정수 수학을 사용합니다. 이로 인해 분수가 억제 될 수 있습니다. 예를 들어, 3/2, 4/3, 5/4와 같은 분수는 실제 값이 다르더라도 map() 함수에서 모두 1로 반환됩니다. 따라서 프로젝트에 정확한 계산 (예 : 소수점 3 자리까지 정확한 전압)이 필요한 경우 map ()을 피하고 직접 코드에서 계산을 수동으로 구현하는 것이 좋습니다.
  • The map() function returns an integer number. If you want to get the float number, you need to put the below custom function in yoru sketch and use it:
float floatMap(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

더보기

Please note: These are affiliate links. If you buy the components through these links, We may get a commission at no extra cost to you. We appreciate it.