Bird
Raised Fist0
Arduinoprogramming~5 mins

Mapping analog values with map() function in Arduino

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction

The map() function helps change a number from one range to another. It is useful when you want to convert sensor readings to a different scale.

You read a sensor value from 0 to 1023 and want to convert it to 0 to 100.
You want to control the brightness of an LED based on a sensor input.
You need to convert a joystick position to a motor speed range.
You want to change temperature sensor readings to a percentage scale.
Syntax
Arduino
map(value, fromLow, fromHigh, toLow, toHigh)

value is the number you want to convert.

The function returns the mapped number scaled from the old range to the new range.

Examples
This converts a sensor value from 0-1023 to 0-255.
Arduino
int sensorValue = 512;
int mappedValue = map(sensorValue, 0, 1023, 0, 255);
This maps temperature from Celsius (0-100) to Fahrenheit (32-212).
Arduino
int tempC = 25;
int tempF = map(tempC, 0, 100, 32, 212);
Sample Program

This program reads an analog sensor value from pin A0, maps it from 0-1023 to 0-255, and prints both values to the Serial Monitor every second.

Arduino
void setup() {
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(A0);  // Read analog input (0-1023)
  int brightness = map(sensorValue, 0, 1023, 0, 255);  // Map to 0-255
  Serial.print("Sensor: ");
  Serial.print(sensorValue);
  Serial.print("  Mapped brightness: ");
  Serial.println(brightness);
  delay(1000);
}
OutputSuccess
Important Notes

The map() function does not constrain the output to the target range. Values outside the input range can produce outputs outside the target range.

Use constrain() if you want to limit the mapped value within a range.

Summary

The map() function changes a number from one range to another.

It is useful for converting sensor readings to useful scales.

Remember to check if you need to constrain the output values.

Practice

(1/5)
1. What does the map() function do in Arduino programming?
easy
A. It converts a number from one range to another range.
B. It reads analog sensor values from pins.
C. It controls the speed of a motor.
D. It stores data in the EEPROM memory.

Solution

  1. Step 1: Understand the purpose of map()

    The map() function takes a number and changes it from one range to another, like converting sensor values to a different scale.
  2. Step 2: Compare with other options

    Reading analog values, controlling motors, or storing data are different functions, not what map() does.
  3. Final Answer:

    It converts a number from one range to another range. -> Option A
  4. Quick Check:

    map() changes ranges = C [OK]
Hint: Remember: map() changes number ranges fast [OK]
Common Mistakes:
  • Confusing map() with analogRead()
  • Thinking map() controls hardware directly
  • Assuming map() stores data permanently
2. Which of the following is the correct syntax to map a value val from range 0-1023 to 0-255?
easy
A. map(val, 0, 255, 0, 1023);
B. map(0, 1023, val, 0, 255);
C. map(val, 0, 1023, 0, 255);
D. map(val, 255, 0, 1023, 0);

Solution

  1. Step 1: Recall map() function parameters

    The correct order is: map(value, fromLow, fromHigh, toLow, toHigh).
  2. Step 2: Match parameters to the question

    We want to map val from 0-1023 to 0-255, so the call is map(val, 0, 1023, 0, 255);.
  3. Final Answer:

    map(val, 0, 1023, 0, 255); -> Option C
  4. Quick Check:

    map(value, 0-1023, 0-255) = D [OK]
Hint: Remember parameter order: value, from range, to range [OK]
Common Mistakes:
  • Swapping from and to ranges
  • Putting value in wrong parameter position
  • Reversing range limits
3. What is the output of this Arduino code snippet?
int sensorValue = 512;
int outputValue = map(sensorValue, 0, 1023, 0, 255);
Serial.println(outputValue);
medium
A. 0
B. 255
C. 512
D. 127

Solution

  1. Step 1: Understand the mapping calculation

    Mapping 512 from 0-1023 to 0-255 scales it roughly to half the output range.
  2. Step 2: Calculate mapped value

    512 is about half of 1023, so output is about half of 255, which is 127.
  3. Final Answer:

    127 -> Option D
  4. Quick Check:

    512 maps to 127 in 0-255 range [OK]
Hint: Half input maps to half output in linear map() [OK]
Common Mistakes:
  • Using input value directly as output
  • Confusing output range limits
  • Rounding errors ignored
4. Identify the error in this code snippet:
int sensorValue = analogRead(A0);
int outputValue = map(sensorValue, 0, 1023, 0, 255)
Serial.println(outputValue);
medium
A. Missing semicolon after map() function call.
B. Incorrect analogRead() usage.
C. map() parameters are in wrong order.
D. Serial.println() cannot print integers.

Solution

  1. Step 1: Check syntax line by line

    The line with map() is missing a semicolon at the end.
  2. Step 2: Verify other lines

    analogRead(A0) and Serial.println() are used correctly.
  3. Final Answer:

    Missing semicolon after map() function call. -> Option A
  4. Quick Check:

    Missing semicolon = A [OK]
Hint: Check every statement ends with a semicolon [OK]
Common Mistakes:
  • Forgetting semicolons after function calls
  • Misordering map() parameters
  • Assuming Serial.println() can't print ints
5. You want to map a sensor value from 0-1023 to a motor speed range of 100-200. Which code correctly maps and constrains the output to this range?
hard
A. int speed = map(sensorValue, 100, 200, 0, 1023);
B. int speed = constrain(map(sensorValue, 0, 1023, 100, 200), 100, 200);
C. int speed = map(sensorValue, 0, 1023, 0, 255);
D. int speed = constrain(sensorValue, 100, 200);

Solution

  1. Step 1: Map sensorValue to motor speed range

    Use map(sensorValue, 0, 1023, 100, 200) to convert sensor reading to speed between 100 and 200.
  2. Step 2: Constrain output to avoid out-of-range values

    Wrap with constrain(..., 100, 200) to keep speed within limits.
  3. Final Answer:

    int speed = constrain(map(sensorValue, 0, 1023, 100, 200), 100, 200); -> Option B
  4. Quick Check:

    Map then constrain for safe range = B [OK]
Hint: Map first, then constrain to keep values safe [OK]
Common Mistakes:
  • Reversing map() range parameters
  • Not constraining output causing invalid speeds
  • Using constrain() without mapping first