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() {} 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.

Ver Também

Please note: These are affiliate links. If you buy the components through these links, We may get a commission at no extra cost to you. We appreciate it.