Arduino project: the map() function

When you acquire analog values from an analog input pin, by default they are acquired as values ranging from 0 to 1023.

This is because the analog read resolution is 10 bits, and 2^10 is 1024.

Tip: on ARM-based Arduino devices, like Arduino Zero, Arduino Due and the Arduino MKR family, you can map up to 12 bits, but the default is 0. On those devices you can call the analogReadResolution(12) to set the resolution to 12 bits, so you can go from 0 to 4095 instead of 1023

The map() function provided by the Arduino language allows you to map that range of values to a different range.

Here’s the function signature:

int <newvalue> = map(<value>, <original_min>, <original_max>, <new_min>, <new_max>);

It’s important to note that the function returns an integer value, the decimal part is cut.

For example you might want to map the original 1024 values we mentioned you can acquire through analog input to a set of only 10 values, because you might have some logic that only handles 10 steps.

You can do so like this:

int acquiredValue = analogRead(A1);
int value = map(acquiredValue, 0, 1023, 0, 9);

Here’s a full example:

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

void loop() {
    int acquiredValue = analogRead(A1);
    int value = map(acquiredValue, 0, 1023, 0, 9);
    Serial.println(value);
}

Now instead of the input having 1024 possible values, you have a restricted set of 10 possible values, going from 0 to 9.

👀 Looking for a job? look at DEVJOBS (BETA) 🔥