La funzione map() serve a “ri-mappare” un numero (ad esempio la lettura di un sensore) da un intervallo ad un’altro.

La sintassi di tale funzione è molto semplice. Per prima cosa si indica la variabile che conterrà il valore “ri-mappati” (value), poi si scrive il valore minimo (fromLow) e massimo (fromHigh) prima della ri-mappatura e, a seguire, il valore minimo (toLow) e massimo (toHigh) dopo la ri-mappatura. Tutti i valori intermedi saranno automaticamente calcolati dalla funzione map().

Vediamo meglio come è fatta tale funzione:

map(value, fromLow, from High, toLow, toHigh)

Per meglio comprendere tale funzione passiamo subito ad un esempio. Supponiamo di voler usare un potenziometro per regolare il fade di un LED. In questo articolo abbiamo già visto come farlo in maniera molto semplice. Noterete che in quel codice era stato necessario dividere per 4 il valore del potenziometro nell’ analogWrite() poichè mentre la “lettura” analogica dà 1024 valori (da 0 a 1023), la “scrittura” analogica dà 256 valori (da 0 a 255) ovvero 1024/4.

La funziome map ci permette di riassegnare i valori del potenziometro e quindi non è più necessario dividere per 4. Vediamo come impostare tale funzione per gestire il fade del LED:

map(potvalue, 0, 1023, 0, 255)

Vediamo, quindi, come riscrivere il codice del fade con il potenziometro adoperando tale funzione. Prima, però, vi ripropongo lo schema di come montare il circuito.

Ed ecco il codice:

const int pot = 0;
const int ledPin = 3;
int potValue = 0;
int ledValue = 0;

void setup(){
pinMode (pot, INPUT);
pinMode (ledPin, OUTPUT);
}

void loop() {
potValue = analogRead(pot);
ledValue = map(potValue, 0, 1023, 0, 255);
analogWrite(ledPin, ledValue);
delay(10);
}

Ovviamente in questo esempio non si ha un elevato guadagno nell’usare la funzione map(), ma in sistemi più complessi risulta essere uno strumento molto potente.