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.
→ I wrote 17 books to help you become a better developer, download them all at $0 cost by joining my newsletter
→ JOIN MY CODING BOOTCAMP, an amazing cohort course that will be a huge step up in your coding career - covering React, Next.js - next edition February 2025