map()

Descrição

Remapeia um número de um intervalo para outro. Isto é, um valor de deMenor seria mapeado para paraMenor, um valor de deMaior para paraMaior, valores dentro de uma faixa para volores dentro da outra faixa, etc.

Não restringe valores a ficar dentro do intervalo, porque valores fora do intervalo são as vezes úteis e pretendidos. A função constrain() pode ser usada tanto antes como depois dessa função, se limites para os intervalos são desejados.

Note que os "limites mínimos" de cada intervalo podem ser maiores ou menores que os "limites máximos" tal que a função map() pode ser usada para reverter um intervalo de números, por exemplo

y = map(x, 1, 50, 50, 1);

A função também funciona bem com números negativos, tal que esse exemplo

y = map(x, 1, 50, 50, -100);

também é valido e funciona bem.

A função map() usa números inteiros e não irá gerar números fracionários, quando a matemática indicar que deveria. Resíduos fracionários são truncados e não são arredondados.

Sintaxe

map(valor, deMenor, deMaior, paraMenor, paraMaior);

Parâmetros

  • valor: o número a ser mapeado
  • deMenor: o menor limite do intervalo atual do valor
  • deMaior: o maior limite do intervalo atual do valor
  • paraMenor: o menor limite do intervalo alvo
  • paraMaior: o maior limite do intervalo alvo

Retorna

O valor mapeado para o novo intervalo.

Código de Exemplo

/* Mapeia um valor analógico para 8 bits (0 a 255) */ void setup() { pinMode(9, OUTPUT); // sets the pin as output } void loop() { int val = analogRead(0); val = map(val, 0, 1023, 0, 255); analogWrite(9, val); }

Apêndice

Para os matematicamnete interessados, aqui tem-se o código da função:

long map(long x, long in_min, long in_max, long out_min, long out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

Notes & Warnings

  • Como mencionado anteriormente, a função map() usa matemática inteira. Então frações podem ser suprimidas devido a isso. Por exemplo, frações como 3/2, 4/3, 5/4 irão ser retornadas como 1 pela função map(), apesar de os valores esperados serem diferentes. Então, se seu projeto requer cálculos precisos (ex. tensão elétrica com precisão de três decimais), por gentileza considere evitar a função map() e implementar os cálculos manualmente no seu código.
  • The map() function returns an integer number. If you want to get the float number, you need to put the below custom function in your sketch and use it:
float floatMap(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
  • Or
double doubleMap(double x, double in_min, double in_max, double out_min, double out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

Ver Também

ARDUINO BUY RECOMMENDATION

Arduino UNO R3
Arduino Starter Kit
Please note: These are Amazon affiliate links. If you buy the components through these links, We will get a commission at no extra cost to you. We appreciate it.

※ OUR MESSAGES