Skip to content

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.


download all my books for free

  • javascript handbook
  • typescript handbook
  • css handbook
  • node.js handbook
  • astro handbook
  • html handbook
  • next.js pages router handbook
  • alpine.js handbook
  • htmx handbook
  • react handbook
  • sql handbook
  • git cheat sheet
  • laravel handbook
  • express handbook
  • swift handbook
  • go handbook
  • php handbook
  • python handbook
  • cli handbook
  • c handbook

subscribe to my newsletter to get them

Terms: by subscribing to the newsletter you agree the following terms and conditions and privacy policy. The aim of the newsletter is to keep you up to date about new tutorials, new book releases or courses organized by Flavio. If you wish to unsubscribe from the newsletter, you can click the unsubscribe link that's present at the bottom of each email, anytime. I will not communicate/spread/publish or otherwise give away your address. Your email address is the only personal information collected, and it's only collected for the primary purpose of keeping you informed through the newsletter. It's stored in a secure server based in the EU. You can contact Flavio by emailing flavio@flaviocopes.com. These terms and conditions are governed by the laws in force in Italy and you unconditionally submit to the jurisdiction of the courts of Italy.

Related posts about electronics: